如何在SQL的独立年份中添加独立月份?

时间:2019-06-04 16:14:58

标签: sql sql-server dateadd getdate

我需要使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

4 个答案:

答案 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是输出应始终为所希望的月份和日期。