谢文彩 发表于 2023-9-14 12:08:03

如何比较SQL Server中的时间?

我正在尝试比较SQL查询中datetime字段中的时间,但不知道是否正确。我不想比较日期部分,只是时间部分。
我正在这样做:
SELECT timeEvent
FROM tbEvents
WHERE convert(datetime, startHour, 8) >= convert(datetime, @startHour, 8)

这是正确的吗?
我问这个问题是因为我需要知道08:00:00是小于还是大于,07:30:00并且我不想比较日期,只是时间部分。
谢谢!
               
解决方案:
               


                您的比较可以工作,但是会很慢,因为日期会转换为每一行的字符串。为了有效地比较两个时间部分,请尝试:
declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'
select (cast(@first as float) - floor(cast(@first as float))) -
       (cast(@second as float) - floor(cast(@second as float)))
       as Difference

详细说明:SQL Server中的日期存储为浮点数。小数点前的数字代表日期。小数点后的数字代表时间。
所以这是一个示例日期:
declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'

让我们将其转换为浮点数:
declare @myfloat float
set @myfloat = cast(@mydate as float)
select @myfloat
-- Shows 39931,8244921682

现在参加数字之后的部分,即时间:
set @myfloat = @myfloat - floor(@myfloat)
select @myfloat
-- Shows 0,824492168212601

将其转换回日期时间:
declare @mytime datetime
set @mytime = convert(datetime,@myfloat)
select @mytime
-- Shows 1900-01-01 19:47:16.123

1900-01-01只是“零”日期。您可以使用convert来显示时间部分,例如指定格式108,这就是时间:
select convert(varchar(32),@mytime,108)
-- Shows 19:47:16

datetime和float之间的转换非常快,因为它们基本上以相同的方式存储。
页: [1]
查看完整版本: 如何比较SQL Server中的时间?