SQL-сервер преобразует строку, представляющую дату и время в дату

Я пытаюсь преобразовать строку «2019-31-01 09:00:00» в дату.

SELECT CAST('2019-31-01 09:00:00.000' AS date);

SQL Server возвращает сообщение об ошибке: не удалось преобразовать дату и/или время из строки символов.

В то время как

DECLARE @MyDate AS datetime = '2019-31-01 00:00:00';
SELECT CAST(@MyDate AS date)    
--2019-01-31

Работает. Из-за локали. Смущает?

Месяц и день, вероятно, смешаны в строковом литерале.

Martin Staufcik 28.06.2019 14:07

Каковы ожидаемые результаты? я полагаю 2019-31-01 без времени?

Raymond Nijland 28.06.2019 14:09

да. Я просто ввожу ГГ: ДД: ММ вместо ГГ: ММ: ДД. Вот и все.

Ludovic Aubert 28.06.2019 14:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
100
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте разумный формат даты/времени (ГГГГ-ММ-ДД):

SELECT CAST('2019-01-31 09:00:00.000' AS date);

Или то, что рекомендует Microsoft:

SELECT CAST('2019-01-31T09:00:00.000' AS date);

Примечание. Вы потеряете компонент времени.

@RaymondNijland нет, тип данных date не имеет компонента времени.

Larnu 28.06.2019 14:25

Да, потому что у скрипки dB были свои форматы отображения. Попробуйте datetime2(7) на этом сайте. Вы получаете тот же формат.

Larnu 28.06.2019 14:29
«Да, потому что у скрипки dB были свои собственные форматы отображения. Попробуйте datetime2 (7) на этом сайте. Вы получите тот же формат». @Larnu, это довольно раздражает, так как у меня нет (локального) SQL Server для тестирования, но это хорошо знать... sqlfiddle.com/#!18/340e0/117 удаление комментариев...
Raymond Nijland 28.06.2019 14:33

@RaymondNijland . . . SQLFiddle более точно представляет даты.

Gordon Linoff 28.06.2019 15:04
«SQLFiddle более точно представляет даты» да я заметил..
Raymond Nijland 28.06.2019 15:05

Формат даты: yyyy-mm-dd:

SELECT CAST('2019-01-31 09:00:00.000' AS date);

Другие вопросы по теме