Oracle SQL遍历日期

哈士奇69

我有一个包含用户系统登录信息的表。

我想报告任何“非工作时间”活动-时间确定为第二天的20:00至06:00。

我可以运行一个简单的查询,该查询返回我需要的信息:

select to_char(logon_time, 'YYYY-MM-DD HH24:MI') , 
username from sessions 
where to_char(logon_time, 'YYYY-MON-DD HH24:MI') 
between '&YEAR-&MONTH-01 20:00' and '&YEAR-&MONTH-02 06:00';

请注意,我必须在此查询中手动定义各个“天”-在这种情况下,它是从当月的第一天的20:00到每月的第二天的06:00。

我想做的是针对一个较大的日期范围(例如,从SYSDATE开始的年初)运行报告,自动迭代各个日期,同时考虑到子查询之间已经存在特定的事实。日期范围子句,跨越多天。

我无法理解如何实现这一目标。任何线索,不胜感激!

MT0

您可以使用以下方法识别所有非工作时间登录:

SELECT logon_time,
       username
FROM   sessions
WHERE  EXTRACT( HOUR FROM CAST( logon_time AS TIMESTAMP ) ) < 6
OR     EXTRACT( HOUR FROM CAST( logon_time AS TIMESTAMP ) ) >= 20

如果您希望在特定的日期范围内使用它,则:

SELECT logon_time,
       username
FROM   sessions
WHERE  (   EXTRACT( HOUR FROM CAST( logon_time AS TIMESTAMP ) ) < 6
       OR  EXTRACT( HOUR FROM CAST( logon_time AS TIMESTAMP ) ) >= 20 )
AND    logon_time BETWEEN DATE '2016-05-01' AND SYSDATE

从5月1日午夜到当前时间,将获得非工作时间登录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章