T-SQL обрезать дату и время до ближайшей даты? - PullRequest
18 голосов
/ 11 февраля 2009

Дубликат Какой ЛУЧШИЙ способ удалить временную часть значения datetime (SQL Server)?

У меня есть столбец, который отслеживает, когда вещи создаются с использованием даты и времени, но я хотел бы создать отчет, который группирует их по дням, поэтому мне нужен способ обнуления компонента времени в столбце даты и времени.

Как мне это сделать?

Ответы [ 8 ]

30 голосов
/ 06 января 2012

Почему бы не конвертировать прямо в дату:

select convert(date, getdate())

Усекает дни, а не раунды. Для округления Дней сделайте это:

select convert(date, getdate() + 0.5)
18 голосов
/ 11 февраля 2009

Один из способов - изменить getdate() на имя вашего столбца,

select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
5 голосов
/ 28 июля 2009

Вот еще одно решение:

SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
1 голос
/ 11 февраля 2009

конвертировать (varchar, поле даты / значение / и т.д., 101)

Это самый простой способ получить дату из даты и времени.

1 голос
/ 11 февраля 2009

Да. Есть много форматов на выбор, поэтому я вместо этого свяжу их.

http://library.cirr.com/Microsoft/SQL-Server-v7/html/ca-co_1.htm

Если вы хотите обнулить время, как указано в вашем сообщении, вы можете попробовать это:

select cast(convert(varchar, getdate(), 101) as datetime)
0 голосов
/ 17 мая 2018

Я просто выполняю приведение (getdate () как дата)

0 голосов
/ 11 февраля 2009

В своих поисках я наткнулся на следующее решение: оно убирает время только из времени UTC, но я нашел его интересным, поэтому я подумал, что кто-то еще тоже будет:

FUNCTION TrimDate(@dt AS DATETIME) RETURNS DATETIME
BEGIN
    RETURN CAST(CAST((@dt - 0.500000038580247) AS INT) AS DATETIME) 
END

Я бы предположил, что он работает быстро, поскольку все, что он делает, - это округление и приведение.

0 голосов
/ 11 февраля 2009
declare @CurrentDate datetime
set @CurrentDate = dateadd(dd, datediff(dd, 0, getdate()), 0)

- или -

select dateadd(dd, datediff(dd, 0, MyDateColumn), 0) as DateOnly
from tblX
...