Ответ 1
Один из способов - изменить getdate()
на ваше имя столбца,
select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
Дубликат Какой лучший способ удалить временную часть значения datetime (SQL Server)?
У меня есть столбец, который отслеживает, когда вещи создаются с использованием datetime, но я бы хотел создать отчет, который группирует их по дням, поэтому мне нужен способ обнуления компонента времени столбца datetime.
Как это сделать?
Один из способов - изменить getdate()
на ваше имя столбца,
select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
Почему бы не конвертировать прямо сейчас:
select convert(date, getdate())
Это урезает дни, а не раунды. Чтобы круглые дни сделать это:
select convert(date, getdate() + 0.5)
Здесь другое решение:
SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
Это простой способ получить дату (в виде строки) из datetime:
convert(varchar, <the date field/value/etc>, 101)
Но обратите внимание, что порядок в этом поле будет в алфавитном порядке, а не по дате, так как теперь это строка
Да. Существует много форматов, поэтому я свяжусь с ним.
http://library.cirr.com/Microsoft/SQL-Server-v7/html/ca-co_1.htm
Если вы хотите отключить время, подобное сообщению, вы можете попробовать следующее:
select cast(convert(varchar, getdate(), 101) as datetime)
declare @CurrentDate datetime
set @CurrentDate = dateadd(dd, datediff(dd, 0, getdate()), 0)
- или -
select dateadd(dd, datediff(dd, 0, MyDateColumn), 0) as DateOnly
from tblX
В моих поисках я натолкнулся на следующее решение: он удаляет время только из UTC, но я нашел это интересным, поэтому я подумал, что и кто-то еще:
FUNCTION TrimDate(@dt AS DATETIME) RETURNS DATETIME
BEGIN
RETURN CAST(CAST((@dt - 0.500000038580247) AS INT) AS DATETIME)
END
Я бы предположил, что он работает быстро, поскольку все, что он делает, - это закругление и литье.
Я просто делаю приведение (getdate() в качестве даты)