2015-07-05 2 views
1

Сегодня я написал два запроса на Datepart() и получить различные возвращения нижеSQL Server DATEPART() функция

Запрос № 1:

Select Datepart(day,'2015-07-05') 

возвращает '5', который я ожидал.

Запрос # 2:

Select Datepart(day, 2015-07-05) 

Возвращает '27', что немного смешно, и я не понимаю, как 27 возвращается.

Разница между этими двумя запросами - одна с датой внутри '', а другая без.

Кто-нибудь может помочь мне здесь?

ответ

5

2015-07-05 только математическое выражение, которое добавляет до целого числа 2003 (Вычитая 7 с 2015 дает 2008 вычесть 5)

2003 вычисляет '1905-06-27' когда неявно приводится к DateTime в качестве отливки int к datetime работает так же, добавив, что количество дней до базовой даты 1 января 1900 года (т.е. равно DATEADD(DAY, 2003,'19000101')).

Так вот, откуда исходит 27 человек.

Правильный способ для обозначения даты литералов в SQL Server как струнный '2015-07-05' (формат ISO - недвусмысленный для новых даты и времени datetypes) или '20150705' (недвусмысленный для унаследованных типов данных) или с помощью ODBC format{ d '2015-07-05' }.

Смежные вопросы