Лучший способ удалить часть времени из datetime в SQL Server
Какой метод обеспечивает наилучшие показатели производительности при удалении временной части из поля datetime в SQL Server?
Я рассмотрел два следующих метода:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
или
b) select cast(convert(char(11), getdate(), 113) as datetime)
Второй метод отправляет немного больше байт, но, возможно, это не так важно, как скорость преобразования.
Оба метода, кажется, работают очень быстро, но может ли быть разница в скорости при обработке сотен тысяч строк и более?
Также интересно, существуют ли более эффективные способы убрать временную часть из datetime в SQL?
5 ответ(ов)
В SQL Server 2008 вы можете использовать следующий код для получения текущей даты в формате MM/DD/YYYY:
CONVERT(DATE, GETDATE(), 101)
Этот запрос использует функцию GETDATE()
, чтобы получить текущее время и дату, и CONVERT()
для приведения типа данных к формату даты с указанием стилевого кода 101
, который соответствует формату MM/DD/YYYY.
Конечно, это старая тема, но чтобы сделать её более полной:
Начиная с SQL Server 2008, вы можете использовать тип данных DATE, так что вы можете просто выполнить следующий запрос:
SELECT CONVERT(DATE, GETDATE())
Этот запрос вернёт текущую дату без времени.
В SQL Server 2008 действительно есть тип данных DATE (также есть тип данных TIME), который позволяет хранить только дату без времени.
Примеры использования:
Чтобы получить текущую дату без времени, вы можете использовать функцию
CAST
:CAST(GETDATE() AS DATE)
Если вы хотите объявить переменную с типом DATE и присвоить ей значение текущей даты, можно сделать это следующим образом:
DECLARE @Dt AS DATE = GETDATE()
Таким образом, вы сможете работать только с датой, игнорируя время, что может быть полезно в различных сценариях.
Данный запрос:
SELECT CAST(FLOOR(CAST(getdate() AS FLOAT)) AS DATETIME)
...не является хорошим решением, согласно комментариям ниже.
Я бы удалил этот ответ, но оставлю его здесь как контрпример, так как считаю, что объяснение комментаторов о том, почему это не лучший подход, все еще полезно.
Вы можете использовать следующий код в SQL для получения текущей даты в формате ISO 8601:
[date] = CONVERT(VARCHAR(10), GETDATE(), 120)
Форматный код 120
преобразует дату в стандарт ISO 8601:
'YYYY-MM-DD', например '2017-01-09'
Это очень удобно использовать в dplyr
(в R
) и pandas
(в Python
)!
Как вернуть только дату из типа данных DateTime в SQL Server
"Вставка результатов хранимой процедуры в временную таблицу"
Как экранировать одинарную кавычку в SQL Server?
Как выполнить оператор UPDATE с JOIN в SQL Server?
Возможно ли задать условия в Count()?