我有一个包含用户系统登录信息的表。
我想报告任何“非工作时间”活动-时间确定为第二天的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开始的年初)运行报告,自动迭代各个日期,同时考虑到子查询之间已经存在特定的事实。日期范围子句,跨越多天。
我无法理解如何实现这一目标。任何线索,不胜感激!
您可以使用以下方法识别所有非工作时间登录:
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] 删除。
我来说两句