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

Gop*_*pal 100 sql sql-server sql-server-2000

使用SQL Server 2000,我如何获得当年的第一个和最后一个日期?

预期产出:

01/01/201231/12/2012

Jam*_*e F 221

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
Run Code Online (Sandbox Code Playgroud)

上面的查询给出了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
Run Code Online (Sandbox Code Playgroud)

技术细节

这是通过与自1900年以来搞清楚的年数DATEDIFF(yy, 0, GETDATE()),然后补充说,到零日期= 1月1日,1900年这可以更改为任意日期的工作通过更换GETDATE()通过更换部分或任意年DATEDIFF(...)与功能"年 - 1900年."

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
Run Code Online (Sandbox Code Playgroud)


Vik*_*dor 11

您可以使用DATEPART当前日期使用函数获取当前年份getUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
Run Code Online (Sandbox Code Playgroud)

  • 我不同意,OP没有指定,并且sql server中设置的数据formet可能返回类似'2012-01-01 12:13:14'而不是'01/01/2012'的内容 (2认同)

Est*_*uis 9

另一种方式:(自 SQL Server 2012 起)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
Run Code Online (Sandbox Code Playgroud)


Pra*_*ari 7

简单地写: -

select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
Run Code Online (Sandbox Code Playgroud)

一年的开始日期.

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  
Run Code Online (Sandbox Code Playgroud)


小智 5

这是一种相当简单的方法;

SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';
Run Code Online (Sandbox Code Playgroud)

它不是性感的,但是很有效。

  • 仅从 Sql Server 2012 开始可用。 (2认同)