Я пытаюсь преобразовать строку «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
Работает. Из-за локали. Смущает?
Каковы ожидаемые результаты? я полагаю 2019-31-01 без времени?
да. Я просто ввожу ГГ: ДД: ММ вместо ГГ: ММ: ДД. Вот и все.


Используйте разумный формат даты/времени (ГГГГ-ММ-ДД):
SELECT CAST('2019-01-31 09:00:00.000' AS date);
Или то, что рекомендует Microsoft:
SELECT CAST('2019-01-31T09:00:00.000' AS date);
Примечание. Вы потеряете компонент времени.
@RaymondNijland нет, тип данных date не имеет компонента времени.
Да, потому что у скрипки dB были свои форматы отображения. Попробуйте datetime2(7) на этом сайте. Вы получаете тот же формат.
@RaymondNijland . . . SQLFiddle более точно представляет даты.
Формат даты: yyyy-mm-dd:
SELECT CAST('2019-01-31 09:00:00.000' AS date);
Месяц и день, вероятно, смешаны в строковом литерале.