2011-09-22 73 views
1

我想問一下,如果有人能夠幫助與SQL查詢。我有格式的時間表:HH:MM:SS。我想編寫一個查詢,以返回當前時間(未來)最近的時間。例如:表格包含3行:12:00:00,12:01:00和12:02:00。如果:SQL查詢 - 時間比較(SQLite)

1)當前時間是:12:00:30。查詢返回:12:01:00。等。

但是!

2)當前時間是:12:02:30。查詢返回:12:00:00。

我寫這個查詢,解決了我1),但不是2)。

select time(myColumn) 
from myTable 
where time(myColumn) >= time(current_timestamp, 'localtime') 
order by myColumn 
limit 1 

如果有人能幫上忙,我將不勝感激。

PS:數據庫是SQLite中(必須),是無法計算的日期,例如:2011-01-01 12:00:00 ...)

謝謝湯姆。

回答

0

編輯我解決它!這是查詢:

select 
case when 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') < time(myColumn)) is null 
then 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') > time(myColumn)) 
else 
(select min(time(myColumn)) from myTable where time(current_timestamp, 'localtime') < time(myColumn)) 
end 

THX添&戴夫·誰給我指了路。

0

編輯:如果你需要得到下一個最近的時間,嘗試:

SELECT time(myColumn) 
FROM myTable 
ORDER BY CASE WHEN myColumn - time(current_timestamp, 'localtime') > 0, 
     THEN myColumn - time(current_timestamp, 'localtime') 
     ELSE myColumn - time(current_timestamp, '24 hours', 'localtime') 
     END CASE 
LIMIT 1 

它按時間來在數據庫中的下一個時間戳量,試圖+ 24小時,如果需要獲得正數(即將到來的時間)。

+0

嗨。謝謝你的答案,但它不起作用。我有3次:16:24:00,16:25:00,20:12:00。當前時間是20:16:00。查詢的返回是20:12:00(應該是16:24:00)。我最接近(但對未來,如果我讓你感到困惑,我很抱歉)。 – Tom

+0

嗯,你的意思是價格是正確的風格(或相反?哈哈我不知道)。試試這個...... – Dave

+0

好的......我*實際上*編輯它這次:) – Dave

2

你可以這樣做:

   select min( time(yourtimecolumn)) from foo 
      where time(current_timestamp, 'localtime') < time(yourtimecolumn) 

由湯姆

+0

這很容易! :) 感謝您的幫助。你是救星!在WHERE子句後面只有一個synthax錯誤 – Tom

+0

不幸的是我發現這個查詢有問題,經過幾次測試,當前時間是例如:21:00:00,並且數據庫中有3行,例如:01:00 :00,01:20:00,02:30:00,查詢返回null。 – Tom

+0

@Tom:但是所有這些時間都不會超過21:00:00。他們在凌晨和21:00: 00是在晚上,你要求*未來*時間:'我想寫一個查詢,使我回到最近的時間(到將來)到當前時間。「所以,這可能只是對你的要求的一個誤解。 – Tim