【问题标题】:SQL SELECT First Day and Last Day of the Month.SQL SELECT 每月的第一天和最后一天。
【发布时间】:2015-02-10 13:56:35
【问题描述】:

尊敬的专业人士,

我构建了一个查询来获取当月的第一天和最后一天,但我遇到了关于当月第一天的时间戳的问题。

declare @FirstDOM datetime, @LastDOM datetime

set @FirstDOM = (select dateadd(dd,-(day(getdate())-1),getdate()) )
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 

自 2015 年 2 月以来,我想获得以下结果:

@FirstDOM = 2015-02-01 00:00:00.000
@LastDOM = 2015-02-28 23:59:59.000

@LastDOM 是正确的,但我没有得到 @FirstDOM 的时间戳部分的零,我得到了正确的日期,但是我运行脚本的时间。假设现在是上午 8:50,我明白了:

2015-02-01 08:50:49.160

解决这个小问题的最佳方法是什么?

问候,

尼克

【问题讨论】:

  • 因为 getdate() 是日期时间,您的查询也将返回日期时间。一种方法是将结果转换为日期,然后转换为 varchar 并手动添加时间,或者您可以使用 datepart 和 dateadd 获得相同的结果。
  • FWIW,'23:59:59.000' 不是一个月的最后一刻。这样你可能会遗漏一些数据。
  • 如果您正在处理像日期时间这样的连续数据,最好使用半开区间(inclusive 起点,exclusive end点) - 您需要计算的值往往更容易找到,并且更容易验证您没有意外在 多个 范围或没有范围中包含特定值,其中范围是指范围是排他的和详尽的。那么改用>=@FirstDOM and < @FirstDONextM 对你有用吗?
  • @Damien_The_Unbeliever,按照你的建议,这对我来说效果最好。 ( >=FirstDOM 和

标签: sql sql-server tsql datetime


【解决方案1】:
declare @FirstDOM datetime, @LastDOM datetime

set @FirstDOM = (select dateadd(d,-1,dateadd(mm,datediff(m,0,getdate()),1 )))
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 
Print @FirstDOM
Print @LastDOM

【讨论】:

    【解决方案2】:

    将@FirstDOM 转换为DATE,如下所示:

    declare @FirstDOM datetime, @LastDOM datetime
    
    set @FirstDOM = (select CONVERT(DATE,dateadd(dd,-(day(getdate())-1),getdate())) )
    set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 
    SELECT @FirstDOM,@LastDOM
    

    我希望这会有所帮助!

    谢谢,

    换位符

    【讨论】:

    • 这将只返回没有日期的日期,并且作者希望它在日期时间中。
    • 作者希望 FirstDOM 的时间戳为“00:00:00”。将其转换为 DATE 将达到相同的效果。
    【解决方案3】:

    您可以使用以下方法获取该月的第一天和最后一天:

    SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)  ----First Day
    SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)) ----Last Day
    

    【讨论】:

      【解决方案4】:

      除了其他答案,自 SQL-Server 2012 起,微软提供

      EOMONTH ( start_date [, month_to_add ] )  
      

      更多详情请关注msdn

      --

      主题:我偶然发现了这个问题,在 SQL 中寻找每月的第一天,该问题已被其他人回答

      【讨论】:

        猜你喜欢
        • 2021-12-11
        • 2019-03-04
        • 1970-01-01
        • 2016-02-09
        • 2014-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多