Как прочитать дату в формате «02 августа 2021 года» в SQL

#sql #sql-server

Вопрос:

У меня есть дата, сохраненная в БД в формате: '02/08/2021' (Дата выбрана из мобильного приложения). Я хочу, чтобы он был сохранен/возвращен в формате: Aug 02, 2021 .

Это то, что я пробовал:

 declare @value Date = '02/08/2021'
select Convert(varchar(30), @value, 107)
 

Но, я получаю ошибку, говоря:

Не удалось выполнить преобразование при преобразовании даты и/или времени из символьной строки.

Как я могу исправить это с помощью SQL-запроса?

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

1. Есть ли какая-то особая причина, по которой вы хотите выполнить форматирование в базе данных? Это гораздо больше похоже на заботу о клиенте, чем о базе данных. (Я бы также рекомендовал вам хранить его в базе данных вообще не в виде текста, а в виде столбца ДАТЫ. База данных, как правило, должна представлять базовые данные, а не какое-либо конкретное представление этих данных.)

2. Если вы правильно объявите свою дату ( declare @value Date = '20210725' ), она будет работать так, как ожидалось

3. Это утверждение ( declare @value Date = '02/08/2021' )является причиной ошибки. Используйте однозначный формат даты declare @value Date = '20210802'

4. Опять же, было бы лучше сделать это в приложении . (Это облегчило бы локализацию для разных пользователей и т.д.) Оставьте базу данных, хранящую данные, и приложение, представляющее данные. (Это также значительно упростит изменение баз данных в будущем, если вам потребуется, и внесет другие изменения в требования.)

5. @Филип, конечно, вам нужны оба утверждения: declare @value date = CONVERT(date, '02/08/2021', 103); select Convert(varchar(30), @value, 107); .

Ответ №1:

вы можете сначала преобразовать строку

 DECLARE @s nvarchar(50) = '02/08/2021'
declare @value Date = SUBSTRING(@s,4,2)   '/'   SUBSTRING(@s,1,2)   '/'   SUBSTRING(@s,7,4)
select Convert(varchar(30), @value, 107)