繁体   English   中英

SQL大于前一天的特定时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM