gpt4 book ai didi

sql - 如何比较 SQL Server 中的时间?

转载 作者:行者123 更新时间:2023-12-01 17:40:55 27 4
gpt4 key购买 nike

我正在尝试比较 SQL 查询中日期时间字段中的时间,但我不知道它是否正确。我不想比较日期部分,只想比较时间部分。

我正在这样做:

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 中的日期存储为 float 。小数点前的数字代表日期。小数点后的数字代表时间。

这是一个日期示例:

declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'

让我们将其转换为 float :

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

日期时间和 float 之间的转换非常快,因为它们基本上以相同的方式存储。

关于sql - 如何比较 SQL Server 中的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/807909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com