【问题标题】:Setting Start and End dates设置开始和结束日期
【发布时间】:2020-04-12 20:27:29
【问题描述】:

我有一个简单的查询,需要使用开始和结束日期变量提取过去 10 天内雇用的所有员工,直到昨天 11:59 结束,不包括当前日期。

我知道有很多方法可以设置这个日期范围。 可以为您提供过去 10 天(不包括当前日期)的开始和结束日期的最有效的 SQL Server 表达式是什么?

    DECLARE @StartDate = ???
    DECLARE @EndDate = ???

    SELECT @StartDate, @EndDate

期望的结果:

    2020-04-02 00:00:00.000, 2020-04-11 23:59:59.000

【问题讨论】:

  • 鉴于您知道许多方法,请尝试它们并检查执行计划以找出执行最佳的方法。
  • 无论如何,您想要的结果可能是错误的。您可能应该在整个日期中使用>=<,直到23:59:59.000

标签: sql sql-server tsql date


【解决方案1】:

:59 方案是个坏主意。比较应少于第二天(开始),以便包括前一天。

SELECT @StartDate = DATEADD(dd,-10,CAST(getdate() AS DATE)), @EndDate = CAST(getdate() AS DATE)

但是如果你仍然想要它:

SELECT @StartDate = DATEADD(dd,-10,CAST(getdate() AS DATE)), @EndDate = DATEADD(ss,-1,CAST(CAST(getdate() AS DATE) AS DATETIME))

【讨论】:

    【解决方案2】:

    希望此代码适用于您的案例:

    SELECT 
    
    @Start=CAST(CAST(GETDATE()-10 AS DATE) AS DATETIME),
    @End=CONCAT(CAST(GETDATE()-1 AS DATE),' 23:59:59.000') ---  
    

    【讨论】: