2015-10-31 61 views
0

在我的SQLite數據庫,我有一個分,秒,並釐秒時間字段:SQLite和STRFTIME

00:01:100 

我想選擇以毫秒MAX值的行,我發現那位的strftime功能。我試着:

SELECT MAX(strftime("%M:%S:%SSS", field)) FROM table; 

但它不起作用。

+0

庵它不工作,因爲你不能只是彌補時間格式它的一個例子。沒有提供百分之一秒的存儲。他們存儲像小數http://www.sqlite.org/lang_datefunc.html < - 這列出允許的格式 – cjds

+1

100釐秒通常被視爲1秒;你的意思是毫秒嗎? –

+0

只需使用MAX()而不使用strftime()。你認爲它有什麼作用? –

回答

1

因爲這不在允許的格式列表中,所以您必須先對其進行編輯以便支持它。

然後運行strftime功能

SELECT MAX(strftime("%H:%M:%f", "00:" || substr(field,1,3) || replace(':','.',substr(field,4)))) FROM table; 

應該將無法​​正常工作


編輯

所以,更新。爲什麼它不起作用:

strftime當你已經有了格式化的時間並且想要將其轉換爲另一種格式時,它非常有用。

您有不支持格式的項目。 (List of formats here)。所以,你可以用默認的TEXT格式保存它。

因此,現在您需要編寫一個查詢,將此文本轉換爲正確的格式並進行比較。你基本上必須編寫自己的最大化函數,它將把這個文本轉換成MAX函數可以處理的東西。

這是通過子串和鑄造的組合完成的。我在下面的查詢中完成的操作是將子字符串轉換爲整數,將它們相乘以將它們轉換爲秒,然後將其添加到MAX

SELECT time,MAX(cast(substr(time,1,2) as integer)*60+cast(substr(time,4,2) as integer)+cast(substr(time,7,3) as integer)/100) FROM t; 

下面是運行

http://sqlfiddle.com/#!7/1c665/1

+0

它不起作用.. – helloimyourmind

+0

我編輯了查詢。你現在可以試試嗎? – cjds

+0

仍然不起作用.. – helloimyourmind