Как вернуть только дату из типа данных 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 задаёт формат даты в виде "гггг/мм/дд".
Лучший способ удалить часть времени из datetime в SQL Server
MySQL Запрос: Группировка по Дню / Месяцу / Году
Сравнение двух дат в JavaScript
"Вставка результатов хранимой процедуры в временную таблицу"
Возможно ли задать условия в Count()?