Рейтинг:
Автор: 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, возвращающую символьное именование даты
Комментарии
В MSSQL10 (2008) появились новые типы для даты/времени: DATE, TIME, DATETIME2, DATETIMEOFFSET; для этих типов формат локально-независимой символьной строки ISO8601 'yyyy-mm-ddThh:mi:ss.nnnnnnn'. При этом формат для старых [SMALL]DATETIME остался тот же
ЗЫ: BOL рекомендует использовать новые форматы.
ЗЫЫ: Вместо GETDATE теперь SYSDATETIME, но и GETDATE есть.
sp_defaultlanguage
SET DATEFORMAT
почему-то не помогли..
хотя полезно узнать что процедуры могут отказать из за смены языка=)
также действует дата в виде 'YYYY-MM-DD'. И с целым числом его уже не перепутать.
Мне помогло
поправьте в статье - формат YYYYMMDD hh:mm:ss
а не YYYYMMDD HH:MM:SS
Полезная инфа и вовремя.
ВО а я там трешки пытался всунуть GOOD
ВО а я там трешки пытался всунуть GOOD
то что искал!
спс
отлично..очень помогло
круто!
'20010302' - супер
MS SQL Server 2000 иногда принимает дату в формате 'YYYYMMDD' за число. Какой-либо закономерности определить не удалось - пришлось переписывать на convert
Сенкс! [Задать подходящий language для используемого sql login-а.]
Супер!
Бальшее пасиба от ведмеда ;)
в мемориз!
Это именно то, что искал! Спасибо!
Как раз то, что нужно!
Пацаны - скажите - как сделать, чтобы дата выводилась без времени, позарез нужно... Заранее Спасибо!
Задавайте дату в виде строки 'YYYYMMDD' (без разделителей) это просто клад :)
ЗЫ: 'YYYYMMDD hh:mm:ss.fff'
пока не пригодилось, но у меня вопрос... как из даты сегодняшней отнять скажем дату рождения, чтобы это было в пределах триггера
Биг фенкс!
А все от того, что народ не знает что дата это целое число, в время дробное. ИМХО, все это форматирование обходится - параметрами.
Каменты рулят
+1
Нормально
Лаконично и вовремя.
Thanks!
Пусть я и не оригинален, спасибо !!!
Для разнообразия :)