Как преобразовать пользовательский формат даты строки в желаемый выходной SQL

#sql-server #date #date-conversion

Вопрос:

В SQL server у меня есть строка даты, которая выглядит примерно как 09/08/2021. Представляет собой дд/ММ/ГГГГ. Так что в данном случае это 09 августа 2021 года. Каждый метод, который я пытаюсь явно преобразовать в формат даты, автоматически преобразует это в 2021-09-08. Таким образом, SQL неверно преобразуется в 08 сентября 2021 года.

 SELECT TRY_CAST(Convert(VARCHAR(15),'09/08/2021',103) as date);
SELECT TRY_CAST(Convert(VARCHAR(15),'09/08/2021',111) as date);
 

Оба неверно дают:

 2021-09-08
 

Желаемый результат -:

 2021-08-09
 

Я пробовал различные версии вышеперечисленного, но все время получаю неверное преобразование. Я тоже не очень хочу идти по пути изменения исходных данных.

Я поражен тем, что ранее по этому поводу не задавалось подобных вопросов.

Как это можно преобразовать явно с помощью функций в SQL Server?

Комментарии:

1. CONVERT принимает стиль при преобразовании в a DATE , но вы преобразуетесь в a VARCHAR(15) . Ты хочешь SELECT TRY_CONVERT(DATE, '09/08/2021', 103) вместо этого.

2. Почему вы вообще ожидаете такого формата? date это двоичное значение, оно не имеет формата . Формат предназначен для вашего уровня презентации, чтобы определить не SQL.

Ответ №1:

Согласно комментариям, ошибкой было преобразование. Приспособлен к

 TRY_CONVERT(DATE, '09/08/2021', 103) 
 

Это устраняет проблему.