Как вернуть только дату из типа данных DateTime в SQL Server
У меня есть запрос к базе данных:
SELECT GETDATE()
Этот запрос возвращает: 2008-09-22 15:24:13.790
.
Я хочу получить только дату без времени: 2008-09-22 00:00:00.000
.
Как я могу этого добиться?
4 ответ(ов)
Если вы используете SQL Server 2008 и выше, то для получения текущей даты без времени вы можете использовать следующий запрос:
SELECT CAST(GETDATE() AS DATE);
Этот запрос преобразует текущую дату и время, получаемые функцией GETDATE()
, в тип данных DATE
, который содержит только дату без времени.
Ваша SQL-запрос выполняет преобразование текущей даты и времени из формата datetime
в формат varchar
, а затем обратно в формат datetime
. Давайте разберем этот запрос подробнее.
GETDATE()
— функция, которая возвращает текущее время и дату в форматеdatetime
.CONVERT(varchar, GETDATE(), 101)
— это преобразование текущей даты в строку форматаMM/DD/YYYY
(код 101 означает именно этот формат).- Затем, мы снова преобразуем полученную строку в формат
datetime
с помощьюCONVERT(datetime, ...)
.
Фактически, ваш запрос приводит дату к строковому формату перед повторным преобразованием в datetime
, что, как правило, не является необходимым шагом, так как GETDATE()
уже возвращает дату в формате datetime
.
Если вам нужно просто получить текущее значение времени в формате datetime
, вы можете использовать:
SELECT GETDATE()
Если вы хотите получить дату в определенном формате для отображения, лучше использовать только CONVERT
, например:
SELECT CONVERT(varchar, GETDATE(), 101) AS FormattedDate
Таким образом, запрос можно упростить, избегая лишних преобразований.
Просто сделайте:
SELECT CAST(date_variable AS date)
или, если вы используете PostgreSQL:
SELECT date_variable::date
Это, кстати, называется приведение типов!
Чтобы вернуть дату в нужном формате, вы можете использовать следующий код:
Для SQL Server 2008 и более ранних версий:
CAST(OrderDate AS date)
Этот код будет работать в SQL Server 2010 и вернёт дату в формате, например, 12/12/2013.
Для SQL Server 2012 и более поздних версий используйте следующий код:
CONVERT(VARCHAR(10), OrderDate, 111)
Этот запрос также вернёт дату в формате, указанном в строке, где 111 задаёт формат даты в виде "гггг/мм/дд".
Сравнение двух дат в JavaScript
"Вставка результатов хранимой процедуры в временную таблицу"
Как экранировать одинарную кавычку в SQL Server?
Как выполнить оператор UPDATE с JOIN в SQL Server?
Сброс начального значения идентификатора после удаления записей в SQL Server