Это может показаться очень простым/глупым вопросом, но если я буду использовать этот код в январе, будет ли выход декабрь (как в январе - 1 = декабрь)?T-SQL DATEDIFF MONTH Январь
SELECT DATENAME(MONTH, DATEDIFF(MONTH, -1, GETDATE()));
Это может показаться очень простым/глупым вопросом, но если я буду использовать этот код в январе, будет ли выход декабрь (как в январе - 1 = декабрь)?T-SQL DATEDIFF MONTH Январь
SELECT DATENAME(MONTH, DATEDIFF(MONTH, -1, GETDATE()));
Вы используя обе функции неправильно. Я рекомендую смотреть на интерактивной справке для получения более подробной информации, но вот объяснение того, что вы сделали ...
DATEDIFF()
«s последние два параметра являются DATETIME
s.
Таким образом, когда вы передаете -1
в качестве первой даты, когда она неявно CAST
к DATETIME
.
0
является 1970-Jan-01 @ 00:00:00
-1
является 1969-Dec-31 @ 00:00:00
.How many months are there between 1969-Dec-31 and now?
DATENAME()
«s второй параметр также является DATETIME
.
Таким образом, когда вы указали 1405
в качестве параметра DATETIME
, который также был неявно преобразован.
1st Jan 1970
6th Nov 1973
DATENAME()
возвращает 'November'
Вы, возможно, просто хочу взять один месяц от определенной даты, а затем получить его имя.
DATENAME(MONTH, DATEADD(MONTH, -1, getDate()))
Спасибо за подробное объяснение! Теперь я понимаю разницу между DATEADD и DATEDIFF. Вместо этого я буду использовать DATEADD. Очень ценится. –
Как написано, нет. На данный момент времени он вернется только November
. Это связано с тем, что вы используете DATEDIFF
вместо DATEADD
.
Вы можете увидеть немного о том, почему он делает это, выбрав DATEDIFF
часть:
SELECT DATEDIFF(MONTH, -1, '2017-01-01')
И Select DateName(Month, 1405)
возвращается November
.
Но, это должно быть то, что вы имели в виду использовать:
SELECT DATENAME(MONTH, DATEADD(MONTH, -1, GETDATE()));
И да, используя который будет возвращать December
:
SELECT DATENAME(MONTH, DATEADD(MONTH, -1, '2017-01-01'));
декабря
@JohnCappelletti - Более короткий ответ; *** Нет *** * (См. Два ответа ниже.) * – MatBailie
Как насчет того, чтобы попробовать? 'declare @MyDate как Date = '20160115'; выберите @MyDate, DateName (месяц, DateDiff (месяц, -1, @MyDate)); '. Вы можете смешать дату и посмотреть, что вы получаете. – HABO
@MatBailie Святой курит! –