如何获得当年的第一个和最后一个日期?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

使用SQLServer 2000,如何获得当前年度的第一个和最后一个日期?

预期输出:

01/01/201231/12/2012

提问于
用户回答回答于
SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

上面的查询给出了12月31日初午夜的日期时间值,这比一年中的最后一刻短了大约24小时。如果你想包括12月31日可能发生的时间,那么你应该比较明年的第一年,并进行<比较。或者你可以比较当前年份的最后几毫秒,但是如果你使用DATETIME以外的东西(例如DATETIME2),这仍然会造成差距:

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
   DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear

技术细节

这是通过计算自1900年以来的年数,DATEDIFF(yy, 0, GETDATE())然后将其添加到零= 1900年1月1日的日期。这可以更改为适用于任意日期,方法GETDATE()是将DATEDIFF(...)函数替换为“1900年 - ”。

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
用户回答回答于

你可以使用DATEPART函数,从当前日期开始使用getUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))

扫码关注云+社区