我需要让一个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
发布于 2019-06-05 00:17:15
如果使用的是SQL Server,则可以使用datefromparts()
select datefromparts(1950, month(getdate()), day(getdate())
或者,从当前年份开始添加若干年:
select dateadd(year, -4, convert(date, getdate()))
它们在闰日的行为可能略有不同,但您需要指定您希望在那一天发生什么。
发布于 2019-06-05 00:22:15
如果您尝试将4个月零1天添加到GetDate()中,请尝试以下操作:
选择DATEADD(MM,4,DATEADD(DD,1,GETDATE()
发布于 2019-06-05 03:10:31
之所以会得到这样的输出,是因为DATEADD
解释整数的方式。
DATEADD
的第三个参数应该是一个完整的日期,但按照原样,它提取的是GETDATE()
的YEAR
值,目前是2019年。DATEADD
将这个数字视为自“第0天”以来的2,019天。在引擎盖下的第0天是1900-01-01 00:00:00.000
,2019天后是1905-07-13 00:00:00.000
。你的内在DATEADD
增加了一天,将你带到7月14日,然后你的外部DATEADD
增加了四个月,产生了你所看到的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);
结果:
+-------------------------+
| NextFive |
+-------------------------+
| 2020-06-04 14:07:56.800 |
| 2021-06-04 14:07:56.800 |
| 2022-06-04 14:07:56.800 |
| 2023-06-04 14:07:56.800 |
| 2024-06-04 14:07:56.800 |
+-------------------------+
https://stackoverflow.com/questions/56447690
复制相似问题