首页 > 解决方案 > sql中的日期时间过滤器

问题描述

我有一个从 sql 查询每小时生成的报告。这里的请求是生成从昨天晚上 8 点到今天中午 12 点的数据。我正在使用以下查询,但没有得到正确的数据:

select * from roster_report where job_start > TRUNC(SYSDATE-1) + 20/24 ;

假设今天的日期是 4 月 29 日,4 月 29 日晚上 11:15 生成的报告正确显示了 4 月 29 日晚上 8:00 到晚上 11:15 的数据。数据在上午 00:00 之后变得不正确,它获取 4 月 29 日本身而不是 4 月 30 日的数据。

该查询将在每小时生成报告后使用。我在 oracle sql developer 中运行它。

标签: sqloracledatetime

解决方案


这里有两种方法:

SELECT * 
  FROM ROSTER_REPORT 
 WHERE JOB_START BETWEEN (TRUNC(SYSDATE - 1) + 20/24) 
                     AND TRUNC(SYSDATE) + 12/24 ;

或者

SELECT * 
  FROM ROSTER_REPORT 
 WHERE JOB_START BETWEEN TO_DATE(TO_CHAR(SYSDATE-1,'DD/MM/RRRR')||' 20:00','DD/MM/RRRR HH24:MI') 
                     AND TO_DATE(TO_CHAR(SYSDATE  ,'DD/MM/RRRR')||' 12:00','DD/MM/RRRR HH24:MI');

推荐阅读