我有一个报告要从sql查询每小时生成一次。 这里的要求是从昨天晚上8点到晚上生成数据 今天中午12点。我使用以下查询但没有获得正确的数据:
select * from roster_report where job_start > TRUNC(SYSDATE-1) + 20/24 ;
假设今天的日期是4月29日,则于4月29日晚11点15分生成的报告正确显示4月29日晚上8点到晚上11点15分的数据。 上午00:00之后数据变得不正确,它取自4月29日本身的数据,而不是4月30日。
每小时后将使用该查询生成报告。 我在oracle sql developer中运行它。
答案 0 :(得分:0)
前一天下午8点
SELECT to_char(trunc(SYSDATE -1) + 20/24,'mm/dd/yyyy hh24:mi:ss AM') FROM dual;
今天下午12点
SELECT to_char(trunc(SYSDATE) + 12/24,'mm/dd/yyyy hh24:mi:ss AM') FROM dual;
示例查询
WITH DATA AS
( SELECT 'text' col, SYSDATE create_date FROM dual
)
select *
from tw_logtable
where tw_logtable.created_datetime
BETWEEN (TRUNC(sysdate -1) + 20/24) AND (TRUNC(sysdate) + 12/24)
答案 1 :(得分:0)
尝试
WHERE
job_start >= ( TRUNC(SYSDATE-1) + INTERVAL '20' HOUR )
AND job_start <= ( TRUNC(SYSDATE) + INTERVAL '12' HOUR )
如果符合您的要求,您可以使用>
或<
。如果你想要的只是包含范围,也可以使用BETWEEN
来简化。
答案 2 :(得分:0)
这里有两种方式:
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');