如何获得当年的第一个和最后一个date

使用SQL Server 2000

如何获得当年的第一个和最后一个date

预期输出

01/01/201231/12/2012

如何得到这个date。

需要SQL查询帮助

11 Solutions collect form web for “如何获得当年的第一个和最后一个date”

 SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear 

上面的查询给出了12月31日初午夜的date时间值,比一年的最后一刻短了大约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日的date来实现。可以将其更改为适用于任意date, GETDATE()部分或任意年份,用“Year – 1900”replaceDATEDIFF(...)函数。

  SELECT DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015, DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015 

您可以使用getUTCDate()函数获取当前年份,从使用getUTCDate()获得的当前date

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

每年有第一个作为第一个date和31作为最后的date,你要做的只是附加年份到当天和月份,例如: –

  SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day], '12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day] 

简单地写: –

 select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0)) 

一年的开始date。

 select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1)) 

本年开始date:

 SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE()) 

本年结束date:

 SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0)) 

看看这个:

 select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear, convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear 
 select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') from dual 
 SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE()) 
 print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date) 

尝试这个:

 DATE_FORMAT(NOW(),'01/01/%Y') DATE_FORMAT(NOW(),'31/12/%Y') 

— Lalmuni Demos —

 create table Users ( userid int,date_of_birth date ) 

—插入值—

 insert into Users values(4,'9/10/1991') select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days, from users 
  • SQL在性能上不好?
  • 使用T-SQL查找最后一次出现子string的索引
  • 有没有办法让一个variables持续一段时间?
  • 有没有办法获得SQL Server中所有当前临时表的列表?
  • SQL Server 2000:如何退出存储过程?