2016-06-14 52 views
0

我一直在試圖讓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

回答

0

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

0

兩件事。首先,你需要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

0

感謝@馬特一週中的一天和我正在使用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代碼的人都應該發表評論,我會將其添加到答案中