我有一个Oracle SQL,它根据当前时间戳选择日期范围。主要思想是在今天的0700和1900之间,或者第二天的1900到0700之间的日期范围内选择发生的记录(moveCompletedOn),具体取决于查询运行时的当前时间戳。
更新:例如:
更新2:澄清
只是澄清一下,选择应该是DAY shift和NIGHT shift。从早上7点到晚上7点以及第二天的晚上7点和早上7点。
无论查询运行的时间如何,当前时间戳都将介于这两个选项之间。我只想根据查询运行的时间选择班次中发生的所有记录。如果它在DAY班次期间运行,它将选择DAY班次的所有记录。如果它在NIGHT班次上运行,它将选择NIGHT班次的所有记录。
我希望现在有点清楚。如果没有,请告诉我。
在SQL Server中不是很好,我想知道如何用SQL Server语言重写这段WHERE语句:
WHERE moveCompletedOn BETWEEN
TO_DATE(TO_CHAR(SYSDATE - (12 / 24), 'DD-MON-YYYY ') ||
DECODE((TO_CHAR(SYSDATE - (12 / 24), 'HH24MI') / 1200), 0, '07:00', '19:00'), 'DD-MON-YYYY HH24:MI') AND
TO_DATE(TO_CHAR(SYSDATE - (12 / 24), 'DD-MON-YYYY ') ||
DECODE((TO_CHAR(SYSDATE - (12 / 24), 'HH24MI') / 1200), 0, '07:00', '19:00'), 'DD-MON-YYYY HH24:MI') + (11 / 24))
任何帮助将不胜感激。
答案 0 :(得分:0)
在SQL server中,我会做这样的事情
select * from aa
where last_update between
DATEADD(HOUR,
case datepart(hour, getdate() )
when 1 then -3
when 2 then -7
else -10
end ,
GETDATE()
)
and
DATEADD(HOUR,
case datepart(hour, getdate() )
when 1 then -1
when 2 then -5
else -5
end ,
GETDATE()
) ;
您可以更改值以满足您的需求。