比较sql中datetime值的时间部分

时间:2013-08-01 09:46:19

标签: sql-server tsql

如何仅比较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 Ctrl=@key

'WorkStart'和'WorkEnd'是一个DateTime字段,日期部分总是包含'1900-01-01'。

参数@saledate是一个日期时间,我怎样才能比较时间部分而不考虑@ saledate,workstart和workend的日期部分。

该表已经使用DateTime字段创建了WorkStart和WorkEnd,我无法修改当前正在使用的字段数据类型。

1 个答案:

答案 0 :(得分:4)

如果使用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

如果您经常这样做,那么将您的时间作为TIME而不是DATETIME存储到数据库列会更高效。