powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пребразование из строки в дату и стиль преобразования
3 сообщений из 3, страница 1 из 1
Пребразование из строки в дату и стиль преобразования
    #39566911
Стиль даты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наблюдаю вот такую картину:
Код: sql
1.
2.
3.
select convert(datetime, '31/12/2017', 103) union all
select convert(datetime, '31-12-2017', 103) union all
select convert(datetime, '31.12.2017', 103)

Код: plaintext
1.
2.
3.
-----------------------
2017-12-31 00:00:00.000
2017-12-31 00:00:00.000
2017-12-31 00:00:00.000

Код: sql
1.
select convert(datetime, '2017.12.01', 103)

Код: plaintext
1.
-----------------------
2017-01-12 00:00:00.000

Код: sql
1.
select convert(datetime, '2017.12.31', 103)

Код: plaintext
1.
2.
-----------------------
Msg 242, Level 16, State 3, Line 6
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Вопрос по первым трем селектам: согласно хелпу , стиль 103 - это маска вида дд/мм/гггг. Почему сервер спокойно переваривает разделители, которых в этой маске нет (дефис и точка)?
Вопрос по второму селекту: в стиле 103 год - последние 4 символа. Однако сервер вытащил год из первых 4 символов, а остальные разбирал в порядке, определенном стилем (сначала день, потом месяц) - почему?
Третий селект, видимо, ведет себя так же, как и второй, и при попытке преобразовать 31 в месяц выдает ошибку. Здесь вопрос тот же, что и ко второму селекту.
По вышеприведенной ссылке, да и вообще в гугле ответов на эти вопросы не нашел.
...
Рейтинг: 0 / 0
Пребразование из строки в дату и стиль преобразования
    #39566980
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стиль даты,

давно замечено, что CONVERT() очень лояльно относится ко многим формальным несоответствиям заявленным форматам.
С моей точки зрения это нечестно и неправильно. Но могут быть и другие точки зрения...

Однако, используя стили и соответствующие им форматы, всегда получите правильный результат.
...
Рейтинг: 0 / 0
Пребразование из строки в дату и стиль преобразования
    #39567082
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стиль даты,

Потому что эти стили относятся только к преобразованию datetime -> varchar, а вы преобразуете в противоположном направлении. В вашем случае сиквел пробует несколько форматов - сначала указанный в параметре, потом вроде бы еще какие-то, наиболее ходовые - из-за чего иногда трактует части даты не так, как ожидает программист. Если же ничего не подходит, то выкидывает ошибку, да.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пребразование из строки в дату и стиль преобразования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]