SQL值大于前一天的特定时间

SQL值大于前一天的特定时间,sql,sql-server,Sql,Sql Server,我们工厂的班次定义为从凌晨4点开始,持续到次日凌晨2点 在某一天的凌晨3点,我想得到上一班的所有记录 下面的查询显示了我前一天到现在的情况,但也包括上一班的上午12点到凌晨2点。如何使查询仅在凌晨4点后获取数据 select * from yourTable WHERE TimeStamp >= dateadd(day,datediff(day,1,GETDATE()),0) 逻辑是从轮班时间中减去2小时,然后使用日期部分。一个简单的实现是: where ca

我们工厂的班次定义为从凌晨4点开始,持续到次日凌晨2点

在某一天的凌晨3点,我想得到上一班的所有记录

下面的查询显示了我前一天到现在的情况,但也包括上一班的上午12点到凌晨2点。如何使查询仅在凌晨4点后获取数据

select 
    * 
    from yourTable
    WHERE TimeStamp >= dateadd(day,datediff(day,1,GETDATE()),0)

逻辑是从轮班时间中减去2小时,然后使用日期部分。一个简单的实现是:

where cast(dateadd(hour, -2, TimeStamp) as date) = cast(dateadd(day, -1, GetDate()) as date)
有时,在常量上进行所有运算更为有效,例如getdate:


注:此逻辑的适当功能是dateadd而不是datediff。

此逻辑是从轮班时间中减去2小时,并使用日期部分。一个简单的实现是:

where cast(dateadd(hour, -2, TimeStamp) as date) = cast(dateadd(day, -1, GetDate()) as date)
有时,在常量上进行所有运算更为有效,例如getdate:


注意:此逻辑的适当函数是dateadd而不是datediff。

您使用的是哪个数据库引擎?Oracle、SQL Server、MySQL…@danjuggler SQL Server您使用的是哪个数据库引擎?Oracle、SQL Server、MySQL…@danjuggler SQL Server如此简单高效。你太过奖了。我只是来帮忙的。这么简单又高效。你过奖了。只是来帮忙的。
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