Преобразование даты и времени 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
1
Возможный дубликат Как удалить временную часть значения datetime (SQL Server)?
Майкл Фрейджейм

Ответы:

123

Взгляните на CONVERT . Третий параметр - это стиль даты и времени, в который вы хотите преобразовать.

например

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format
AdaTheDev
источник
12
Кажется, что 106 - это «дд мон гг», а «дд / ММ / гггг» - это 103
nahab
3
@nahab Вы правы. Кроме того, мне пришлось использовать varchar (11) вместо varchar (10), чтобы предотвратить сокращение года (например, я видел 195 вместо 1953)
Хенров
6
Кроме того, вы можете использовать 101, если хотите, чтобы результаты были отформатированы в мм / дд / гггг
iliketocode
58

Попробуй это:

print cast(getdate() as date )

jabu.hlong
источник
5
Мне этот вариант нравится больше, чем принятый ответ. Он оставляет столбец в формате даты, так что мой «порядок по» работает правильно, а не просто varchar.
Milne
2
Это не работает в SQL Server 2005 и ранее. Тип данных DATE был введен в SQL 2008.
JerryOL
Как указано выше, действительно приятно получить тип данных даты, но когда ожидается определенный формат (например, «дд ММ гггг»), тогда требуется больше.
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

Предлагаемые: и вы хотите изменить DateTime на сегодняшний день , чтобы выглядеть , как 2018-03-30

cast(YourDateField as Date)
BIReportGuy
источник
1
вы не добавили ничего нового, jabu.hlong уже дал этот ответ 4 года назад ...
Павел Чапски
Нет гарантии, что дата будет отображаться в формате OP. Это может быть гггг-ММ-дд, дд / ММ / гггг, дд / ММ / гггг 00:00:00 или что-то еще.
trincot
4

Самый короткий формат даты мм / дд / гг может быть получен с помощью:

Select Convert(varchar(8),getdate(),1)
bsivel
источник
0

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

дата заказа указана в дате и времени. Этот запрос покажет заказы на эту дату, а не на дату и время.

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

Анудж Каул
источник
0

Для любых версий SQL Server: dateadd (dd, dateiff (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
Вот что он стремился получить - дд / ММ / гггг; и это то, что дает мой ответ 20.11.2018
Юсеф Албакуш
Во-первых, 20.11.2018 - это не дд / ММ / гггг, а гггг-ММ-дд. Но рендеринг действительно зависит от системы (и локали). В моей системе он также производит часы, минуты и секунды (все ноль). Это связано с тем, что вы не указали SQL, как дата должна быть представлена ​​в виде строки, а OP требует точного строкового формата.
trincot
Во-первых, 2018-11-20 связано с тем, что мой компьютер настроен на использование арабского языка; Во-вторых, я попробую после изменения короткой даты на моем ПК
Юсеф Альбакуш