我一直在尝试在SQL Server中获得最接近的更长时间,我在名为TIMETEST
的表中使用列ID
和Ti
包含这些值:
ID Ti
---------------
1 01:00:00
2 03:09:00
3 07:00:00
4 12:00:00
当我尝试
时SELECT TOP 1 *
FROM TIMETEST
WHERE ('1:59' < Ti)
它返回&#34; 03:09:00&#34;这是正确的,但当我尝试
SELECT TOP 1 *
FROM TIMETEST
WHERE ('12:00:00' < Ti)
我应该得到&#34; 01:00:00&#34;但它返回一个空列。
答案 0 :(得分:0)
24小时时间对12小时?
尝试这样做以获得凌晨1点
SELECT TOP 1 * FROM TIMETEST WHERE ('00:00:00' < Ti) ORDER BY Ti
如果您想通过12小时的时间来完成,那么将需要更多的逻辑,但您必须具体说明上午或下午的时间。
答案 1 :(得分:0)
两件事。首先,您需要ORDER BY
。几乎在任何情况下,当您拥有TOP
时,您应该使用ORDER BY
。所以:
SELECT TOP 1 *
FROM TIMETEST
WHERE '1:59' < Ti
ORDER BY Ti ASC
其次,如果列不是time
数据类型,则比较将以字符串形式完成。为了安全起见,您可以强制转换常量:
SELECT TOP 1 *
FROM TIMETEST
WHERE CAST('1:59' as TIME) < Ti
ORDER BY Ti ASC
答案 2 :(得分:0)
再次感谢 @Matt ,我能够在24小时内完成
我添加了一个名为DOW的列,这意味着一周中的某天,我正在使用Android代码
所以,如果我尝试:
Select * from TIMETEST Where Ti > '12:00:00' AND DOW = 'Tuesday' ORDER BY Ti
我得到一个空集,这意味着在12:01:00和23:59:00之间没有包含时间的列我的Android代码会自动将查询更改为
第二天工作正常。
Select * from TIMETEST Where Ti > '00:00:00' AND DOW = 'Wednesday' ORDER BY Ti
谢谢你的回答
任何需要Android代码的人都应该发表评论,我会将其添加到答案中