Перетворити дату SQL Server на коротший формат дати


83

У мене є datetimeстовпець у SQL Server, який дає мені такі дані, 10/27/2010 12:57:49 pmі я хочу запитати цей стовпець, але просто SQL Server повертає день, місяць і рік - наприклад.2010 10 27або щось подібне.

Які функції я повинен досліджувати?

Чи слід намагатися перетворити на інший тип даних дати? Або просто перетворити його на рядок?


2
Погляньте на цю статтю: msdn.microsoft.com/en-us/library/ms187928.aspx Зокрема> Стилі дати та часу
Brissles

6
Яка версія SQL Server ?? SQL Server 2008 представив навантаження нових типів даних, пов’язаних з датою та часом, наприклад DATE- тому, якщо ви перебуваєте у 2008 році, ви можете використовувати SELECT CAST(YourDateTimeColumn AS DATE)і повертаєте лише дату - без часової частини.
marc_s


Відповіді:


123

Погляньте на CONVERT . 3-й параметр - це стиль дати та часу, в який потрібно конвертувати.

напр

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
Здається, 106 - це "dd mon yy", а "dd / MM / yyyy" - 103
nahab

3
@nahab Ви маєте рацію. Крім того, мені довелося використовувати varchar (11) замість varchar (10), щоб не допустити скорочення року (наприклад, я бачив 195 замість 1953)
Генров

6
Крім того, ви можете використовувати 101, якщо хочете, щоб результати були відформатовані мм / дд / рррр
iliketocode

58

Спробуйте це:

print cast(getdate() as date )


5
Цей варіант мені подобається більше, ніж прийнята відповідь. Він залишає стовпець у форматі Date, так що моє "упорядкування" працює правильно, а не просто varchar.
Мілн,

2
Це не працює на SQL Server 2005 і раніше. Тип даних DATE був введений з SQL 2008.
JerryOL

Як зазначено вище, дійсно приємно отримати тип даних дати, але коли очікується певний формат (наприклад, "dd MM yyyy"), тоді потрібно більше.
trincot

15

Якщо вам потрібен результат у форматі дати, ви можете використовувати:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

На додаток до CAST і CONVERT, якщо ви використовуєте Sql Server 2008, ви можете перетворити на тип дати (або використовувати цей тип для початку), а потім за бажанням знову перетворити на varchar:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

вихід:

2012-01-17

6

З SQL Server 2005 я б використовував таке:

select replace(convert(char(10),getdate(),102),'.',' ')

Результати: 2015 03 05


5

Якщо у вас є DATETIME поле , яке дає результати , як це 2018-03-30 08: 43: 28.177

Запропоновано: і ви хочете змінити дату на дату, щоб виглядати як 30.03.2018

cast(YourDateField as Date)

1
ви не додали нічого нового, jabu.hlong вже дав цю відповідь 4 роки тому ...
Павел Чапський,

Не впевнені, що дата буде відображена у форматі OP. Це може бути рррр-ММ-дд, дд / ММ / рррр, дд / ММ / рррр 00:00:00, чи ще щось інше.
trincot

4

Найкоротший формат дати мм / дд / рр можна отримати за допомогою:

Select Convert(varchar(8),getdate(),1)

0

Просто додайте ключове слово дати. Наприклад, виберіть дату (дату замовлення), врахуйте (1) від замовлень, де дата замовлення> '2014-10-01' групувати за датою (дата замовлення);

дата замовлення вказана в даті. Цей запит відображатиме замовлення на цю дату, а не на дату та час.

Ключове слово Date, застосоване до стовпця datetime, змінить його на коротку дату.


0

Для будь-яких версій SQL Server: dateadd (dd, datumiff (dd, 0, getdate ()), 0)


Не впевнені, що дата буде відображена у форматі OP. Це може бути рррр-ММ-дд, дд / ММ / рррр, дд / ММ / рррр 00:00:00, чи ще щось інше.
trincot

0

Початкове поле DateTime: [_Date_Time]

Перетворено в Shortdate: 'Short_Date'

CONVERT(date, [_Date_Time]) AS 'Short_Date'

Це повертає тип даних дати, який буде залишено інтерфейсу для відображення у вигляді рядка, тому цілком може видатися "27/12/2018 00:00:00". Це не те, про що просив ОП.
trincot

Це те, що він прагнув отримати - дд / мм / рррр; і це те, що дає моя відповідь 2018-11-20
Юсеф Альбакуш

Ну перш за все 2018-11-20 - це не дд / мм / рррр, а рррр-ММ-дд. Але візуалізація насправді залежить від системи (та мови). У моїй системі він також видає години, хвилини та секунди (все нуль). Це тому, що ви не сказали SQL, як дату слід представляти як рядок, а OP потребує точного формату рядка.
trincot

По-перше, 2018-11-20 - це тому, що мій ПК налаштований на використання арабської мови; По-друге, я спробую це після зміни короткої дати на моєму ПК
Юсеф Альбакоуш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.