首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SQL中将独立月份添加到独立年份?

如何在SQL中将独立月份添加到独立年份?
EN

Stack Overflow用户
提问于 2019-06-05 00:14:59
回答 4查看 60关注 0票数 0

我需要让一个SQL脚本返回相同的日期和月份,但不同的年份为每年。

我尝试使用DATEADD将月份和日期添加到YEAR(GETDATE())形式的独立年份中。

代码语言:javascript
复制
SELECT DATEADD(MM, 4, DATEADD(DD, 1, YEAR(GETDATE())))

当我运行它时,它返回的是1905-11-14 00:00:00.000,即使我用一个实际的日期替换了GETDATE()DATEADD()的绝对有效,因为当我改变其中的数字时,输出也会相应地改变。

-编辑--

我需要它的输出是月份和日期始终保持在mm= 04和dd= 01,但是我需要年份等于它正在运行的当前年份。

所以基本上是这样的:

(当年)-04-01

EN

回答 4

Stack Overflow用户

发布于 2019-06-05 00:17:15

如果使用的是SQL Server,则可以使用datefromparts()

代码语言:javascript
复制
select datefromparts(1950, month(getdate()), day(getdate())

或者,从当前年份开始添加若干年:

代码语言:javascript
复制
select dateadd(year, -4, convert(date, getdate()))

它们在闰日的行为可能略有不同,但您需要指定您希望在那一天发生什么。

票数 0
EN

Stack Overflow用户

发布于 2019-06-05 00:22:15

如果您尝试将4个月零1天添加到GetDate()中,请尝试以下操作:

选择DATEADD(MM,4,DATEADD(DD,1,GETDATE()

票数 0
EN

Stack Overflow用户

发布于 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

如果你感兴趣的是改变年份,你可以直接使用:

代码语言:javascript
复制
SELECT DATEADD(YEAR,<Whatever your offset value or values are>,GETDATE());

为了获得,比如说,未来五年的价值:

代码语言:javascript
复制
SELECT DATEADD(YEAR,X,GETDATE()) AS NextFive
FROM
  (VALUES (1),(2),(3),(4),(5)) AS y(X);

结果:

代码语言:javascript
复制
+-------------------------+
|        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 |
+-------------------------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56447690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档