Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
Игорь Бобак
Member

Откуда:
Сообщений: 426
Всем добрый день.

Сервер версии
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)

запускаем запрос

declare @dt1 datetime, @dt2 datetime
select @dt1 = '2014-01-01 00:00:00.000'
select @dt2 = '2014-01-02 00:00:00.000'
select @dt1, @dt2


и наивно думаем, что в @dt2 сидит второе января. А фиг там - см. картинку. Там первое февраля.

Я вот всегда думал, что если писать строчку в формате '2013-05-12', то єто всегда воспринимается как YYYY-MM-DD,
а оказывается не всегда: бывает, что это воспринимается как YYYY-DD-MM.

От чего это зависит?

К сообщению приложен файл. Размер - 7Kb
27 май 14, 01:13    [16076759]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
o-o
Guest
потому что языкозависимый формат.
сравните:
set language us_english
declare @dt1 datetime, @dt2 datetime, @dt3 datetime
select @dt1 = '2014-01-01 00:00:00.000'
select @dt2 = '2014-01-02 00:00:00.000'
select @dt3 = '2014-01-02T00:00:00.000'

select @dt1, @dt2, @dt3
------------------------
2014-01-01 00:00:00.000	2014-01-02 00:00:00.000	2014-01-02 00:00:00.000

set language russian
declare @dt1 datetime, @dt2 datetime, @dt3 datetime
select @dt1 = '2014-01-01 00:00:00.000'
select @dt2 = '2014-01-02 00:00:00.000'
select @dt3 = '2014-01-02T00:00:00.000'

select @dt1, @dt2, @dt3
------------------------
2014-01-01 00:00:00.000	2014-02-01 00:00:00.000	2014-01-02 00:00:00.000


+
It is important to note that some character string formats of date and time literals are language
dependent
, meaning that when you convert them to a date and time data type, SQL Server might
interpret the value differently based on the language setting in effect in the session. Each logon defined
by the database administrator has a default language associated with it, and unless it is changed
explicitly, that language becomes the effective language in the session. You can overwrite the default
language in your session by using the SET LANGUAGE command, but this is generally not recommended
because some aspects of the code might rely on the user’s default language.

The effective language in the session sets several language-related settings behind the scenes,
among them one called DATEFORMAT, which determines how SQL Server interprets the literals
you enter when they are converted from a character string type to a date and time type. The
DATEFORMAT setting is expressed as a combination of the characters d, m, and y. For example, the
us_english language setting sets the DATEFORMAT to mdy, whereas the British language setting
sets the DATEFORMAT to dmy. You can override the DATEFORMAT setting in your session by using
the SET DATEFORMAT command, but as mentioned earlier, changing language-related settings is
generally not recommended.

Language-Neutral Date and Time Data Type Formats
Data Type    Recommended Entry Format 
DATETIME ‘YYYYMMDD hh:mm:ss.nnn’
‘YYYY-MM-DDThh:mm:ss.nnn’
‘YYYYMMDD’
27 май 14, 01:40    [16076785]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Однако, для типа DATE этот формат распознаётся однозначно.

Использование данных даты и времени
27 май 14, 09:32    [16077158]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
Игорь Бобак,

перед запросом, всегда пишите
set dateformat ymd
27 май 14, 11:15    [16077841]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
гость 18
Guest
StarikNavy,

используйте строковый формат без разделителей
27 май 14, 11:21    [16077888]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1840
А я заметил что если язык пользователя Английский, то 2014-05-02 это 2 мая. А если язык пользователя Русский, то это 5 февраля.
27 май 14, 11:23    [16077904]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1840
гость 18
StarikNavy,

используйте строковый формат без разделителей

Не всегда удобно. Например AdeptSQL генерирует скрипты вида YYYY-MM-DD и править все строки печально.
27 май 14, 11:23    [16077911]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
гость 18
Guest
X-Cite
А я заметил что если язык пользователя Английский, то 2014-05-02 это 2 мая. А если язык пользователя Русский, то это 5 февраля.


O_o правда что ли?!
27 май 14, 11:25    [16077923]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1840
Игорь Бобак
Всем добрый день.

Сервер версии
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)

запускаем запрос

declare @dt1 datetime, @dt2 datetime
select @dt1 = '2014-01-01 00:00:00.000'
select @dt2 = '2014-01-02 00:00:00.000'
select @dt1, @dt2


и наивно думаем, что в @dt2 сидит второе января. А фиг там - см. картинку. Там первое февраля.

Я вот всегда думал, что если писать строчку в формате '2013-05-12', то єто всегда воспринимается как YYYY-MM-DD,
а оказывается не всегда: бывает, что это воспринимается как YYYY-DD-MM.

От чего это зависит?

Попробуйте в свойствах пользователя выбрать другой язык, например с русского на английский.
27 май 14, 11:25    [16077930]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1840
гость 18
X-Cite
А я заметил что если язык пользователя Английский, то 2014-05-02 это 2 мая. А если язык пользователя Русский, то это 5 февраля.


O_o правда что ли?!

Сам в шоке. Но у меня так и есть.. на 2012 сервере.
27 май 14, 11:26    [16077937]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
X-Cite
гость 18
пропущено...


O_o правда что ли?!

Сам в шоке. Но у меня так и есть.. на 2012 сервере.
Говорю же, этот формат однозначен только для DATE.
Вы чего, не читаете ответы что ли?!
Ссылку исчерпывающую дал...
27 май 14, 11:32    [16077972]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
o-o
Guest
слушайте, а мой пост точно видно?
а тот, к-ый топик-стартера?
у него вообще-то как раз про февраль пример,
и вроде я в своем посте как раз язык сессии меняю...а под спойлером еще и все расписано
и про язык логина, и про DATEFORMAT.
...а все продолжают открывать февральскую америку

кстати об инглише.
английский английскому рознь, только американский "переворачивает дату" :P
27 май 14, 11:33    [16077982]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
гость 18
Guest
X-Cite
гость 18
пропущено...


O_o правда что ли?!

Сам в шоке. Но у меня так и есть.. на 2012 сервере.


Ради бога, извините меня. Но я как-то не подумал, что вы не поймете такой неприкрытый сарказм :)
27 май 14, 11:33    [16077985]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
X-Cite
Например AdeptSQL генерирует скрипты вида YYYY-MM-DD и править все строки печально.
У AdeptSQL формат даты настраивается.
27 май 14, 11:34    [16077994]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
o-o
Guest
iap
Вы чего, не читаете ответы что ли?!


у нас часть постов абсолютна невидима. для некоторых
но они точно есть, вот Вы же видите, и я тоже
27 май 14, 11:35    [16078006]     Ответить | Цитировать Сообщить модератору
 Re: Формат даты YYYY-MM-DD воспринимается как YYYY-DD-MM  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1840
гость 18
X-Cite
пропущено...

Сам в шоке. Но у меня так и есть.. на 2012 сервере.


Ради бога, извините меня. Но я как-то не подумал, что вы не поймете такой неприкрытый сарказм :)


Хлебом не корми, дай вставить свои 25 копеек ;)

Зачем читать все, если достаточно прочитать вопрос и написать ответ :)
27 май 14, 11:40    [16078051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить