【问题标题】:SQL Greater than specific time on the previous daySQL 大于前一天的特定时间
【发布时间】:2015-11-25 16:29:02
【问题描述】:

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

在某一天的凌晨 3 点,我想获取上一班的所有记录。

下面的查询可以让我从前一天到现在,但也包括“上一个”班次的凌晨 12 点到凌晨 2 点。如何仅在凌晨 4 点之后获取查询以获取数据?

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

【问题讨论】:

  • 您使用的是哪个数据库引擎? (Oracle、SQL Server、MySQL...)
  • @danjuggler sql server

标签: sql sql-server


【解决方案1】:
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】:

逻辑是从轮班时间中减去 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多