【问题标题】:How to I add a standalone month to a standalone year in SQL?如何在 SQL 中将独立月份添加到独立年份?
【发布时间】:2019-06-04 16:14:58
【问题描述】:

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

【问题讨论】:

  • 我不明白你希望你的输出是什么样子。示例数据在这里会有所帮助。

标签: sql sql-server dateadd getdate


【解决方案1】:

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

select datefromparts(1950, month(getdate()), day(getdate())

或者,添加从当前年份开始的年数:

select dateadd(year, -4, convert(date, getdate()))

这些对于闰日的行为可能略有不同,但您需要指定您希望在那一天发生的事情。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您得到输出的原因是DATEADD 解释整数的方式。

      DATEADD 的第三个参数应该是一个完整的日期,但正如所写的那样,它正在提取 GETDATE()YEAR 值,目前是 2019 年。DATEADD 将该数字视为自 2019 年以来的 2019 天“第 0 天”。第 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 |
      +-------------------------+
      

      【讨论】:

        【解决方案4】:

        我已经知道怎么做了,

        我取了过去的一年,“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 是输出应始终为所需的月份和日期。

        【讨论】:

          猜你喜欢
          • 2019-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多