我需要使SQL脚本返回相同的日期和月份,但每年返回的年份不同。
我尝试使用DATEADD
将月份和日期添加为YEAR(GETDATE())
形式的独立年份。
SELECT DATEADD(MM, 4, DATEADD(DD, 1, YEAR(GETDATE())))
运行此命令时,即使我将1905-11-14 00:00:00.000
替换为实际日期,它也会返回GETDATE()
,DATEADD()
的确可以像我更改其中的数字一样工作输出会相应地更改。
-编辑-
我需要的输出是使月和日始终保持在mm = 04和dd = 01,但是我需要年份等于正在运行的当年。
所以基本上是这样的:
(当前年份)-04-01
答案 0 :(得分:0)
如果使用的是SQL Server,则可以使用datefromparts()
:
select datefromparts(1950, month(getdate()), day(getdate())
或者,从当前年份起加上若干年:
select dateadd(year, -4, convert(date, getdate()))
在leap日,这些行为可能会略有不同,但是您需要指定当天要发生的事情。
答案 1 :(得分:0)
如果您要向GetDate()添加4个月零一天,请尝试以下操作:
选择DATEADD(MM,4,DATEADD(DD,1,GETDATE()))
答案 2 :(得分:0)
获得输出的原因是因为DATEADD
解释整数的方式。
DATEADD
的第三个参数应为完整日期,但按照书面形式,它提取的YEAR
的{{1}}值(当前为2019年)。GETDATE()
正在处理自“第0天”起为2119天。公开日的第0天为DATEADD
,而2019年之后的日期为1900-01-01 00:00:00.000
。内部1905-07-13 00:00:00.000
会增加一天,带您到7月14日,然后外部DATEADD
会增加四个月,导致您看到的DATEADD
。< / p>
如果您只想改变年份,可以使用:
1905-11-14 00:00:00.000
例如,要获得未来五年的价值:
SELECT DATEADD(YEAR,<Whatever your offset value or values are>,GETDATE());
结果:
SELECT DATEADD(YEAR,X,GETDATE()) AS NextFive
FROM
(VALUES (1),(2),(3),(4),(5)) AS y(X);
答案 3 :(得分:0)
我想出了办法
我过去一年是'1900-01-01',他们只是做了一个DATEDIFF()以返回自该日期以来的年数:
DATEDIFF(YY, '1900-04-01', GETDATE())
使用此方法,我可以将结果添加到固定年份'1900'加上所需的恒定月份(04)和日期(01)(所以'1900-04-01')以产生所需的结果,这很容易通过将常量日期与上面的DATEDIFF()语句一起放在DATEADD()语句中来完成:
SELECT DATEADD(YY, DATEDIFF(YY, '1900-04-01', GETDATE()), '1900-04-01')
这将产生以下结果:
2019-04-01 00:00:00.000
这里是2019年,是由GETDATE()语句生成的脚本正在运行的当前年份,而04-01是输出应始终为所希望的月份和日期。