假設這是針對Oracle的,假設PERFORM_DT_TM
列的數據類型爲DATE
...
我們可以使用TO_CHAR
函數來格式化時間部分。例如:
TO_CHAR(t.perform_dt_tm,'HH24:MI')
,我們可以做一個CASE
表達字符串比較。例如:
SELECT CASE
WHEN TO_CHAR(t.perform_dt_tm,'HH24:MI') >= '06:00'
AND TO_CHAR(t.perform_dt_tm,'HH24:MI') < '14:30'
THEN 'First Shift'
WHEN TO_CHAR(t.perform_dt_tm,'HH24:MI') >= '14:30'
AND TO_CHAR(t.perform_dt_tm,'HH24:MI') < '23:00'
THEN 'Second Shift'
WHEN TO_CHAR(t.perform_dt_tm,'HH24:MI') >= '23:00'
OR TO_CHAR(t.perform_dt_tm,'HH24:MI') < '06:00'
THEN 'Third Shift'
ELSE 'Unknown'
END AS which_shift
, t.perform_dt_tm
, ...
FROM ... t
注意:這是基於這樣的假設,該列的數據類型是DATE
,並認爲這是Oracle。如果列是不同的數據類型,那麼我們需要調整提取「時間」部分的方式。
TO_CHAR函數特定於Oracle。如果這是Oracle以外的數據庫,我們需要調整提取時間部分的表達式。 (例如爲MySQL DATE_FORMAT)
的等效結果可以被更簡明地獲得:
SELECT CASE
WHEN TO_CHAR(t.perform_dt_tm,'HH24') < '06:00'
THEN 'Third Shift'
WHEN TO_CHAR(t.perform_dt_tm,'HH24:MI') < '14:30'
THEN 'First Shift'
WHEN TO_CHAR(t.perform_dt_tm,'HH24') < '23:00'
THEN 'Second Shift'
WHEN TO_CHAR(t.perform_dt_tm,'HH24') < '24:00'
THEN 'Third Shift'
ELSE 'Unknown'
END AS which_shift
, t.perform_dt_tm
, ...
FROM ... t
列PERF ORM_DT_TM是日期/時間類型? – scaisEdge
我希望這是一個錯字... HH-MM-SS應該是HH-MI-SS,對不對?你不顯示月份而不是幾分鐘? – mathguy