2013-08-01 2 views
2

Как сравнить только временную часть значений datetime в sql.Сравнение временной части значений даты и времени в sql

Я попробовал это следующим образом,

DECLARE @t1 smalldatetime 
SET @t1=CAST('1900-01-01 '+CONVERT(varchar(8),@saledate,108) As smalldatetime) 
-------------------------------------------------------------------------------- 

SELECT Model FROM Sales WHERE @t1 between WorkStart and WorkEnd And [email protected] 

«WorkStart» и «WorkEnd» представляет собой поле DateTime и дата часть всегда содержит «1900-01-01».

И параметр @saledate - это datetime, как я могу сравнить только временную часть, не рассматривая часть даты @ saledate, workstart и workend.

В таблице уже созданы поля WorkStart и WorkEnd с полем DateTime, и я не могу изменить тип данных поля, поскольку он в настоящее время используется.

+0

Я думаю, вам нужно указать вашу базу данных ... функции datetime меняются от db до db. –

+1

Какова версия вашего сервера? Возможно ли 'CAST (@saledate AS TIME)? – GriGrim

+0

@Sanoj: Выполнить этот оператор 'SELECT @@ VERSION' –

ответ

3

Если вы используете SQL Server 2008 или новее, вы можете применить к типу данных TIME для сравнения временной части.

SELECT Model 
FROM Sales 
WHERE 
    CAST(@saledate AS time) BETWEEN CAST(WorkStart AS time) AND CAST(WorkEnd AS time) 
    AND Ctrl = @key 

Если вы сделаете это часто, это будет более производительным, что ваше время хранятся в столбцах базы данных, как время, а не DATETIME.

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