Причина, по которой вы получаете вывод, заключается в том, что DATEADD
интерпретирует целые числа.
Третий аргумент для DATEADD
должен быть полной датой, но, как написано, он извлекает значение YEAR
GETDATE()
, которое в настоящее время равно 2019. DATEADD
рассматривает это число как две тысячи идевятнадцать дней с «дня 0».День 0 под капотом - 1900-01-01 00:00:00.000
, а через 2019 дней - 1905-07-13 00:00:00.000
.Ваш внутренний DATEADD
добавляет один день к этому, чтобы перенести вас на 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 |
+-------------------------+