如何获得当年的第一个和最后一个date
使用SQL Server 2000
如何获得当年的第一个和最后一个date
预期输出
01/01/2012
和31/12/2012
如何得到这个date。
需要SQL查询帮助
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