#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)