SQL DATEADD Не возвращается конец квартала - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь использовать функцию DATEADD, чтобы добавить четверть к дате. Моя среда - MS Mgmt Studio (v17.7) и SQL Server Express (14.0.1000). Базируется в Великобритании.

Код, который я использую, очень прост, как показано ниже, меня просто смущают возвращаемые значения:

SELECT DATEADD(q,1,'1997-09-30')

Я бы ожидал возвращаемое значение «1997-12-30: 00: 00.000», но вместо этого я получаю «1997-12-30 00: 00: 00.000», т.е. 30 числа месяца, а не 31 числа.

Я попытался выполнить поиск переполнения стека, но не нашел подобных проблем. До сих пор я пытался изменить параметры и тип даты, например:

SELECT DATEADD(q,2,'1997-09-30') - возвращается 1998-03-30 00: 00: 00.000 (я бы ожидал 1998-03-31 00: 00: 00.000)

SELECT DATEADD(qq,1,'1997-09-30') / SELECT DATEADD(quarter,1,'1997-09-30') - тот же результат

Я также пытался использовать параметр

declare @date datetime (also tried datetime2, smalldate, date)
set @date = ('1997-09-30')
SELECT DATEADD(q,1,@date) 

Может кто-нибудь дать мне указатель на то, где я иду не так? Я что-то упустил с функцией DATEADD или есть какая-то переменная окружения, где мне нужно изменить? Спасибо!

Ответы [ 2 ]

6 голосов
/ 13 марта 2019

Четверть определяется как 3 месяца.почему вы ожидаете, что через 3 месяца после 1997-09-30 до не будет 1997-12-30?Вы не ожидали, что DATEADD(q,1,'20000101') вернет '2000-06-30' или '2000-03-31', не так ли?

Если вы хотите, чтобы конец месяца длился 3 месяца после определенной даты, вы можете использовать EOMONTH:

SELECT EOMONTH(DATEADD(QUARTER,1,'19970930'));
0 голосов
/ 13 марта 2019

Поскольку у вас более новая версия SQL Server, ответ Ларну - отличный. Если у вас есть более старая версия (<2012), которая не поддерживает функцию <a href="https://docs.microsoft.com/en-us/sql/t-sql/functions/eomonth-transact-sql?view=sql-server-2017" rel="nofollow noreferrer"> EOMONTH , вы можете сделать это следующим образом:

declare @date date
set @date = ('1997-09-30')
SELECT DATEADD(DAY,-1,DATEADD(q,1,DATEADD(DAY,1,@date)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...