SQL大于前一天的特定时间

时间:2015-11-25 16:29:02

标签: sql sql-server

我们工厂的转变定义为从凌晨4点开始,一直持续到第二天凌晨2点。

在某一天的凌晨3点,我想获得前一班次的所有记录。

下面的查询到达前一天到目前为止,但也包括“前一个”班次的上午12点到凌晨2点。如何获取查询仅在凌晨4点之后获取数据?

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

BEGIN;
   (run file_1)
   (run file_2)
COMMIT;

有时,对"常数"进行所有算术运算会更有效率。 (即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()