繁体   English   中英

在where子句中查询日期和特定时间

[英]Query date and specific time in the where clause

我正在寻找有关Oracle SQL的帮助。 我需要在where子句中查询日期和时间,以根据当前日期查找班次数据。 有3个班次,从早上5点到下午1点,从下午1点到9点以及从晚上9点到5点(第二天早上。例如

SELECT 'T1' AS SHIFT, WORK_CENTER, SUM(CASE WHEN AQL='PASS' THEN 1 ELSE 0) END AS AQL_PASSED
FROM Z_INSPECTION_DEFECTS
WHERE DATE_TIME >= TO_DATE((SELECT CONCAT(TO_CHAR(CURRENT_DATE, ''DD-MON-YYYY''), '' 5:00:00 '') FROM DUAL)  , ''DD-MON-YYYY HH:MI:SS '') AND
       DATE_TIME < TO_DATE((SELECT CONCAT(TO_CHAR(CURRENT_DATE, ''DD-MON-YYYY''), '' 1:00:00 '') FROM DUAL) , ''DD-MON-YYYY HH:MI:SS '')

我没有从该查询中得到任何结果。 日期时间字段是洛杉矶本地时间的时间戳。

眼前的问题是,您正在寻找的时间是凌晨5点之后和凌晨1点之前,这在逻辑上意味着没有任何匹配-因为没有时间可以同时满足这两者。 您可以改用24小时制:

WHERE DATE_TIME >= TO_DATE((SELECT CONCAT(TO_CHAR(CURRENT_DATE, ''DD-MON-YYYY''), '' 5:00:00 '') FROM DUAL)  , ''DD-MON-YYYY HH24:MI:SS '') AND
       DATE_TIME < TO_DATE((SELECT CONCAT(TO_CHAR(CURRENT_DATE, ''DD-MON-YYYY''), ''13:00:00 '') FROM DUAL) , ''DD-MON-YYYY HH24:MI:SS '')

但也有其他方法得到那些,如不只是对查询dual

WHERE DATE_TIME >= TO_DATE(TO_CHAR(CURRENT_DATE, ''DD-MON-YYYY'') || '' 5:00:00 '', ''DD-MON-YYYY HH24:MI:SS '') AND
       DATE_TIME < TO_DATE(TO_CHAR(CURRENT_DATE, ''DD-MON-YYYY'') || ''13:00:00 '', ''DD-MON-YYYY HH24:MI:SS '')

或采用截断和日期算术:

WHERE DATE_TIME >= TRUNC(CURRENT_DATE) + (5/24) AND
       DATE_TIME < TRUNC(CURRENT_DATE) + (13/24)

您确实需要在目标时区中获得这些时间,例如:

WHERE DATE_TIME >= FROM_TZ(CAST(TRUNC(CURRENT_DATE) + (5/24) AS TIMESTAMP), ''America/Los_Angeles'') AND
       DATE_TIME < FROM_TZ(CAST(TRUNC(CURRENT_DATE) + (13/24) AS TIMESTAMP), ''America/Los_Angeles'')

您需要注意current_date (在当前会话时区中)和sysdate (在服务器时区中)。 如果您的会话是UTC,则current_date可能无法满足您的期望。

(我坚持使用转义单引号,因为这主要是您在问题中所遇到的,这意味着您可能正在使用动态SQL来运行它;是否需要是另一回事。如果仅是为了提供句号,在运行时的偏移量,那么就不必是动态的...)

您可以通过以下方式查看这些计算产生的时间:

select FROM_TZ(CAST(TRUNC(CURRENT_DATE) + (5/24) AS TIMESTAMP), 'America/Los_Angeles'),
       FROM_TZ(CAST(TRUNC(CURRENT_DATE) + (13/24) AS TIMESTAMP), 'America/Los_Angeles')
from dual;

FROM_TZ(CAST(TRUNC(CURRENT_DATE)+(5/24)ASTIMESTAM FROM_TZ(CAST(TRUNC(CURRENT_DATE)+(13/24)ASTIMESTA
------------------------------------------------- -------------------------------------------------
2018-10-22 05:00:00.000000000 AMERICA/LOS_ANGELES 2018-10-22 13:00:00.000000000 AMERICA/LOS_ANGELES

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM