如何获得最近更多的时间

问题描述:

我一直在试图让SQL Server中的最近的更大的时候,我已经在我的表,这些数值称为TIMETEST与列IDTi如何获得最近更多的时间

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) 

它返回 “3点09分00秒”,这是正确的,但是当我尝试

SELECT TOP 1 * 
FROM TIMETEST 
WHERE ('12:00:00' < Ti) 

我应该得到“01:00:00”,但它返回一个空列。

+0

您的时间值采用24小时格式。所以1:00:00是凌晨1点,不得超过12:00:00。 – BJones

24小时和12小时?

试试这个,而不是拿到1 AM

SELECT TOP 1 * FROM TIMETEST WHERE ('00:00:00' < Ti) ORDER BY Ti 

如果你想通过12个小时的时间,然后将需要一些更多的逻辑做,但你必须在特定时期上午或下午。

+0

非常感谢,因为我的名誉,我想我会添加一些逻辑到您的答案并使用它 – Collins

+0

@Collins我很高兴它帮助你。我了解我正在尝试打造自己的声望。如果它回答了你的问题,你就能够接受这样的答案,这将使我们都有所建树。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work希望一切都适合你。 – Matt

两件事。首先,你需要ORDER BY。几乎在任何情况下,当你有TOP时,你应该使用ORDER BY。所以:

SELECT TOP 1 * 
FROM TIMETEST 
WHERE '1:59' < Ti 
ORDER BY Ti ASC 

其次,如果列不是time数据类型,那么,比较完成的字符串。为了安全起见,你可以强制不断的转换:一次我能使用24小时时间 我增加了一个名为DOW列,这意味着做

SELECT TOP 1 * 
FROM TIMETEST 
WHERE CAST('1:59' as TIME) < Ti 
ORDER BY Ti ASC 
+0

感谢您的回答。我从来没有听说过演员,但看到你的回答让我觉得我可以在没有任何其他解释的情况下使用它。 – Collins

感谢@马特一周中的一天和我正在使用Android代码。
所以,如果我尝试:
Select * from TIMETEST Where Ti > '12:00:00' AND DOW = 'Tuesday' ORDER BY Ti
和我得到一个空集表示有含12:01:00和我的Android代码之间23:59:00时间会自动更改查询中没有列 下一工作正常的日子。
Select * from TIMETEST Where Ti > '00:00:00' AND DOW = 'Wednesday' ORDER BY Ti
感谢您的回答。
任何需要Android代码的人都应该发表评论,我会将其添加到答案中