如何将表中的时间值与SQL中的当前时间进行比较?

时间:2018-03-28 04:46:24

标签: sql-server time

我有一个名为TimeList的表:

|    Slot    |
==============
|    10:00   |
|    11:00   |
|    12:00   |
|    13:00   | and so on

将时间保存在Varchar(5)

期望的结果应该是显示时间大于当前时间的行,例如,如果当前时间是11:12 A.M.结果应该返回:

|    Slot    |
==============
|    12:00   |
|    13:00   |

我尝试将两个值转换为时间并将它们与:

进行比较
SELECT * 
FROM TimeList
WHERE Convert(Time, Slot) > Convert(Time, GETDATE())

但它没有说明Time在SQL

中不是可识别的格式

无论如何我可以比较这两个时段吗?

3 个答案:

答案 0 :(得分:2)

我认为,取决于您正在运行的SQL Server版本。在2012年或之后有一个CAST(作为时间),但我认为这是一个相当新的发展。所以...将当前日期/时间与时间表进行比较,时间表转换为"时间,如果是今天,"这样的事情应该有效:

SELECT * 
FROM TimeList
WHERE Convert(Datetime, FORMAT (GETDATE(), 'd') + ' ' + Slot) > GETDATE()

相反,如果您想将时间与当前时间进行比较,请将其作为文字:

SELECT * 
FROM TimeList
WHERE Slot > FORMAT(GETDATE(), N'hh\:mm')

答案 1 :(得分:1)

试试这个......

SELECT *
FROM    TimeList
WHERE Slot > CONVERT(time,GETDATE())

答案 2 :(得分:0)

非常感谢您的所有答案,幸运的是,我从您的答案中找到了我的问题的答案。

解决方案是:

SELECT *
FROM TimeList
WHERE Slot > CONVERT(varchar(5),GETDATE(), 108)

似乎108是保存为char / varchar的时间格式,其中Slot也被归类为