Microsoft SQL Server
Transact-SQL

Дата-время строковой константой

Опубликовано: 27 сен 02
Рейтинг:

Автор: Dankov
Прислал:

Задавайте дату в виде строки 'YYYYMMDD' (без разделителей) или дату-время 'YYYYMMDD HH:MM:SS'. Фича в том, что в указанном формате SQL-сервер всегда однозначно интерпретирует дату, независимо от региональных и прочих настроек. Например, " ... WHERE SomeDateField<'20010302' ... ". Эта дата при любом раскладе будет интерпретирована сервером как 2 марта 2001 года.

Если вы по каким-то причинам не можете влиять на формат передаваемой серверу символьной строки, то можно
- воспользоваться функцией CONVERT, у которой 3-ий параметер определяет формат. Например запрос
select convert(datetime, '02/01/2004', 104) преобразует строку к дате 2-ое Января 2004 г
а запрос
select convert(datetime, '02/01/2004', 101) преобразует строку к дате 1-ое Февраля 2004 г

- воспользоваться настройкой SET DATEFORMAT. Но она действует только для текущего коннекта и на время коннекта

- Задать подходящий language для используемого sql login-а. С помощью системной процедуры sp_defaultlanguage или утилиты Enterprise Manager.
Это ведет к неявному выполнению SET DATEFORMAT при установлении коннекта. Правда эта установка будет влиять и на результаты некоторых других функций. Например, на DATENAME, возвращающую символьное именование даты

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / Transact-SQL / Дата-время строковой константой