#sql #sql-server
Вопрос:
У меня есть небольшая задача, и мне нужно получить формат ddmmyyyy для моих DateTime
значений в SQL Server.
Я пытался сделать это с помощью этого кода
SELECT convert(varchar, getdate(), 104)
и это работает нормально, но возвращает dd.mm.yyyy
or 01.11.2021
. Мне это нужно 01112021
, но я пока не могу этого добиться.
Я использую эту ссылку для получения кодов формата datetime, но я не могу найти ни одного кода, который действительно помог бы мне достичь моей цели.
Комментарии:
1. Форматирование дат — это работа для уровня представления, а не для уровня SQL.
2. Также, пожалуйста, пожалуйста, пожалуйста, не указывайте
varchar
без длины .
Ответ №1:
Нет точного соответствия требуемому формату, который вам нужен — вы можете использовать
SELECT REPLACE(CONVERT(varchar(20), SYSDATETIME(), 104), '.', '')
(используйте то, что у вас было, и просто удалите .
после первого шага форматирования)
или вы можете использовать FORMAT
тот, который доступен в SQL Server 2012 и новее:
SELECT FORMAT(SYSDATETIME(), 'ddMMyyyy')
Комментарии:
1. Зачем использовать
SYSDATETIME
? Я знаю, что это обеспечивает большую точность, но все это удаляется форматированием…2. @PeterB: поскольку он предлагает поддержку для всех типов данных даты и времени, у меня просто вошло в привычку использовать
SYSDATETIME()
вместоGETDATE()
(который всегда «только» возвращает aDATETIME
— warts и все)3. @PeterB все в порядке, это был просто пример, хотя я не использую
GetDate()
orSYSDATETIME()
в настоящее время. Но это тоже помогло. Вам тоже спасибо.
Ответ №2:
Не существует определенного формата, который удовлетворяет вашему запросу. Однако вы можете использовать функцию ‘Replace’, чтобы удалить значение из разделителей дат.
select replace(convert(varchar, getdate(),104),'.','')
ИЛИ используйте более новую функцию форматирования (SQL server 2012 )
SELECT FORMAT(getdate(), 'ddMMyyyy')
Ответ №3:
Для его завершения вы можете использовать функцию replace .
select replace(convert(varchar, getdate(), 104),'.','')