[英]SQL Greater than specific time on the previous day
我们工厂的轮班定义为从凌晨4点开始,一直持续到第二天凌晨2点。
我想在给定的一天凌晨3点获取上次轮班的所有记录。
下面的查询让我获得了前一天到现在的信息,但还包括“上一个上一个”班次的凌晨12点至凌晨2点。 如何仅在凌晨4点之后获取查询以获取数据?
select
*
from yourTable
WHERE TimeStamp >= dateadd(day,datediff(day,1,GETDATE()),0)
DECLARE @yesterday DATE = GETDATE()-1
DECLARE @time TIME = '04:00:00'
DECLARE @shiftstart DATETIME = CAST(@yesterday AS DATETIME) + CAST(@time AS DATETIME)
select
*
from yourTable
WHERE TimeStamp >= @shiftstart
逻辑是从轮班时间中减去2个小时并使用日期部分。 一个简单的实现是:
where cast(dateadd(hour, -2, TimeStamp) as date) = cast(dateadd(day, -1, GetDate()) as date)
有时,对“常量”执行所有算术(即getdate()
)会更有效:
where TimeStamp >= dateadd(hour, 2, cast(GetDate() as Date))
注意:此逻辑的适当函数是dateadd()
而不是datediff()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.