Как получить дату в формате ГГГГ-ММ-ДД из поля даты и времени TSQL? - PullRequest
246 голосов
/ 20 мая 2009

Как получить дату с SQL Server в формате YYYY-MM-DD? Мне нужно это для работы с SQL Server 2000 и выше. Есть ли простой способ сделать это в SQL Server или будет проще преобразовать его программно после получения набора результатов?

Я прочитал CAST и CONVERT в Microsoft Technet, но нужный мне формат отсутствует в списке, и изменение формата даты не вариант.

Ответы [ 21 ]

390 голосов
/ 20 мая 2009
SELECT CONVERT(char(10), GetDate(),126)

Ограничение размера varchar отбивных в той порции часа, которую вы не хотите.

96 голосов
/ 21 декабря 2015

Начиная с SQL Server 2012 (оригинальный вопрос для 2000):

SELECT FORMAT(GetDate(), 'yyyy-MM-dd')

93 голосов
/ 30 августа 2016
SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
35 голосов
/ 20 мая 2009

Форма, которую вы запрашиваете, указана в электронной документации на книги.

http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

Например, попробуйте следующее:

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
26 голосов
/ 20 мая 2009

Функция convert с указателем формата 120 даст вам формат «гггг-мм-дд ЧЧ: мм: сс», поэтому вам просто нужно ограничить длину 10, чтобы получить только часть даты:

convert(varchar(10), theDate, 120)

Однако форматирование дат обычно лучше выполнять на уровне представления, а не на уровне базы данных или на уровне бизнеса. Если вы вернете дату, отформатированную из базы данных, клиентский код должен снова проанализировать ее, если ему нужно будет выполнить какие-либо вычисления.

Пример на C #:

theDate.ToString("yyyy-MM-dd")
14 голосов
/ 07 сентября 2011

Для ГГГГММДД попробуйте

select convert(varchar,getDate(),112)

Я тестировал только на SQLServer2008.

6 голосов
/ 29 октября 2012
replace(convert(varchar, getdate(), 111), '/','-')

Также выполнит трюк, не "ничего отрубая".

6 голосов
/ 05 декабря 2013

В случае, если кто-то захочет сделать это наоборот и найдет это.

select convert(datetime, '12.09.2014', 104)

Преобразует строку в немецком формате даты в объект datetime.

Почему 104? Смотрите здесь: http://msdn.microsoft.com/en-us/library/ms187928.aspx

6 голосов
/ 11 июня 2013

Для тех, кто хотел бы, чтобы часть времени также (я сделал), следующий фрагмент может помочь

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513
6 голосов
/ 05 января 2012

Еще один способ ...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...