T-SQL для обрезки даты и времени до ближайшей даты?


person Allain Lalonde    schedule 11.02.2009    source источник


Ответы (7)


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

select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
person SQLMenace    schedule 11.02.2009
comment
Я не думаю, что +0 требуется (по крайней мере, с использованием sql server 2012+). Это самый креативный и полезный ответ, который я когда-либо видел. - person Rolan; 09.04.2018

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

select convert(date, getdate())

Это усекает дни, а не раунды. Чтобы округлить Дни, сделайте следующее:

select convert(date, getdate() + 0.5)
person pieman72    schedule 05.01.2012
comment
Это лучший ответ за его простоту и ясность. - person Kirk Woll; 07.04.2012
comment
Нет, если вы используете SqlServer 2005 - person TheMoot; 22.05.2012
comment
@nalply, потому что SQL Server 2005 не имеет типа данных date - person John Pick; 29.12.2013

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

SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
person richardtallent    schedule 27.07.2009

Это простой способ получить дату (в виде строки) из datetime:

convert(varchar, <the date field/value/etc>, 101)

Но обратите внимание, что в этом поле будет сортировка по алфавиту, а не по дате, поскольку теперь это строка.

person notnot    schedule 11.02.2009

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

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

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

select cast(convert(varchar, getdate(), 101) as datetime)
person Austin Salonen    schedule 11.02.2009
comment
convert (datetime, convert (varchar, getdate (), 101)) - person Gordon Bell; 11.02.2009
comment
неработающей ссылке. Новая ссылка на страницу library.cirr.com/Microsoft /SQL-Server-v7/html/ca-co_1.htm - person monkeypushbutton; 24.04.2010

Я просто использую (getdate () как дату)

person C_BB    schedule 17.05.2018

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

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

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

person Allain Lalonde    schedule 11.02.2009