Публикация

CAST и CONVERT в MS SQL SERVER

Поделюсь собственным опытом исправления ошибок.
Начну с постановки задачи. В отчете для пользователя необходимо было разбить годичный временной период на кварталы. Разработчик использовал для определения дат начала и окончания квартала следующую конструкцию

cast

('01.01.' + @Year as datetime), cast('04.01.' + @Year as datetime)

Все было бы хорошо, но у клиента были различные настройки языка для пользователей базы данных. Поэтому для различных пользователей cast проходил по разному. Для пользователей с английскими настройками языка cast('04.01.' + @Year as datetime) конвертировался как 1 апреля, а для пользователей с русскими  настройками как 4 января. Далее в отчете происходила выборка данных, в соответствии с определенными периодами кварталов, и одни пользователи получали отчет в нормальном виде, другие в искаженном.
Для исправления достаточно было просто заменить cast на CONVERT и явно указать стиль даты

CONVERT

(datetime,'01.01.' + @Year,104), CONVERT(datetime,'01.04.' + @Year,104)

Нравится

Поделиться

1 комментарий

Очень полезная заметка. Сам не раз сталкивался с непонятной работой CAST.
Спасибо

Показать все комментарии