4

如何仅比较 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,我无法修改当前正在使用的字段数据类型。

4

1 回答 1

5

如果您使用 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 存储到数据库列中会更高效。

于 2013-08-01T09:58:30.157 回答