有没有办法在Oracle SQL中仅提取当天当前班次的数据?

问题描述 投票:0回答:1

我正在尝试从 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,所以我也必须考虑到白天的变化。 我尝试将等号从第一行中删除,但它中断并显示未知命令。

sql oracle oracle-sqldeveloper
1个回答
0
投票

如果您没有未来的日期/时间,那么:

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;
© www.soinside.com 2019 - 2024. All rights reserved.