如何仅比较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,我无法修改当前正在使用的字段数据类型。
答案 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存储到数据库列会更高效。