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

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

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

Ответы [ 21 ]

5 голосов
/ 20 мая 2009

В вашей ссылке и преобразовании используйте стиль 126 таким образом:

CONVERT (varchar(10), DTvalue, 126)

Это сокращает время. Ваше требование иметь его в формате гггг-мм-дд означает, что это должны быть строковый тип данных и дата / время.

Честно говоря, я бы сделал это на клиенте, если у вас нет веских причин не делать этого.

4 голосов
/ 13 октября 2011

Если вы хотите использовать ее как дату вместо varchar снова после этого, не забудьте преобразовать ее обратно:

select convert(datetime,CONVERT(char(10), GetDate(),126))
2 голосов
/ 20 мая 2009

SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)

1 голос
/ 13 ноября 2018

Вы также можете использовать. Это с использованием нового типа данных DATE. Может работать не во всех предыдущих версиях, но значительно упрощено для использования в более поздних версиях

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)
1 голос
/ 11 января 2018

С SQL Server 2008 вы можете сделать это: CONVERT(date,getdate())

1 голос
/ 20 мая 2009

Я бы использовал:

CONVERT(char(10),GETDATE(),126)
1 голос
/ 20 марта 2012
SELECT Code,Description FROM TABLE

-- This will Include only date part of 14th March 2010. Any date with date companents will not be considered.
WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

-- This will Include the whole day of 14th March 2010
--WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))
0 голосов
/ 28 августа 2017
 IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;
0 голосов
/ 23 февраля 2017

Это решение работает для меня, просто и эффективно (с 126 тоже)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
0 голосов
/ 22 февраля 2017

Если ваш исходный формат даты испорчен, попробуйте что-то вроде:

select
convert(nvarchar(50),year(a.messedupDate))+'-'+
(case when len(convert(nvarchar(50),month(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' 
    else convert(nvarchar(50),month(a.messedupDate)) end)+
(case when len(convert(nvarchar(50),day(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-'
    else convert(nvarchar(50),day(a.messedupDate)) end) 
from messytable a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...