我正在尝试从 Oracle 数据库中提取当前班次的数据,这两个班次是 0830-2030 和 2030-0830。我目前正在使用下面这个,但我认为第一行有问题。
IF SYSDATE(HHMM) >= 0830 AND SYSDATE(HHMM) <= 2030
THEN
SELECT * FROM table
WHERE rej_date = TO_CHAR(SYSDATE,'YYYYMMDD')
AND TO_NUMBER(rej_TIME) > 830 AND TO_NUMBER(rej_TIME) < 2030;
ELSE
SELECT * FROM table
WHERE rej_date = TO_CHAR(SYSDATE -1,'YYYYMMDD') OR rej_date = TO_CHAR(SYSDATE,'YYYYMMDD')
AND TO_NUMBER(rej_TIME) > 2030 AND TO_NUMBER(rej_TIME) < 830;
我基本上有一个包含“RollID”、“Reject_Type”、“rej_date(yyyymmdd char)”、“rej_time”(HHMM char) 列的表,并且全天都有条目,我只想返回属于以下的行当前的班次无论是白班 0830-2030 还是夜班 2030-0830,所以我也必须考虑到白天的变化。 我尝试将等号从第一行中删除,但它中断并显示未知命令。
如果您没有未来的日期/时间,那么:
SELECT *
FROM table
WHERE TO_DATE(rej_date||rej_time, 'YYYYMMDDHH24MI')
>= CASE
WHEN EXTRACT(HOUR FROM SYSDATE - INTERVAL '08:30' HOUR TO MINUTE) <= 12
THEN TRUNC(SYSDATE - INTERVAL '08:30' HOUR TO MINUTE) + INTERVAL '08:30' HOUR TO MINUTE
ELSE TRUNC(SYSDATE - INTERVAL '08:30' HOUR TO MINUTE) + INTERVAL '20:30' HOUR TO MINUTE
END;