2014-01-22 3 views
1

Это кажется излишним, но это единственный способ, которым я был в состоянии пола сегодняшних DateTime до 00: 00: 00.000 на уровне базы данных:Наиболее эффективный способ даты пола сегодняшнего

select CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS DATETIME) 

Я попытался с помощью:

select FLOOR(getdate()) 

Но получить следующее сообщение:

неявное преобразование из типа данных даты-времени всплывать не допускается. Используйте функцию CONVERT для запуска this query.

Может ли кто-нибудь порекомендовать другой способ сделать это?

ответ

3

Поскольку вы используете SQL Server 2008, вы можете использовать тип данных date.

declare @Today date 

set @Today = getdate() 

select @Today  

Или без переменной.

select cast(getdate() as date) 

Если вам нужно, чтобы значение в качестве даты и времени просто возвращало его обратно в дату и время.

select cast(cast(getdate() as date) as datetime) 
+0

Результаты должны быть datetime, так как у меня есть функция в другом месте, которая будет считывать значение и проверять дату и время. Будет ли это работать, если это тип данных даты? – JsonStatham

+0

Он будет * вероятно * быть неявно преобразованным, но чтобы убедиться, что вы можете просто преобразовать его обратно в 'datetime'. –

1

Есть много способов сделать это, я видел пол раньше. Вот еще несколько.

select cast(cast(CURRENT_TIMESTAMP as date) as datetime) 

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 0) 

SELECT CAST(CAST(CURRENT_TIMESTAMP - 0.50000004 AS int) AS datetime) 

Я нормально делаю версию Cast на сегодняшний день.

Смежные вопросы