2013-01-05 140 views
0

在我的數據庫SQLite的我有一個存儲爲字符串,爲什麼當我嘗試將它們與此查詢訂單編號的字母順序

select... order by cast("+filter+" as real) 
訂購

這個錯誤的順序返回我的號碼列浮點數和時間列:

22,5 
    23 
    23,5 
    23 
    23,5 
    24,5 
    24 

或我的時間列也與此順序錯誤:

00:56 
00:57 
00:52 
00:46 
+0

您是否嘗試過訂購它們而不將它們轉換爲真實的訂單,因爲字符串可能會工作 –

+0

因此,您在字符串列中有兩個非字符串數據類型。你今天過得不好嗎? 45:24應該在45.24之前還是之後? –

回答

0

嘗試

select... order by cast(replace("+filter+",',','.') as real) 

Sqlite需要點而不是逗號作爲分數部分分隔符。它也默默忽略了不可轉換的尾巴,所以'24,5'轉換爲24.0。

從您的時間欄開始,如果您將其排序爲字符串,而不是將其轉換爲浮點型,它將很好地排序。但是如果你想出於某種原因投射它,你可以用冒號變成replace

+0

是的,通過「+過濾器+」asc「命令沒有投我的時間和漂浮列好,但沒有其他列我有INT(總是存儲爲字符串)他們顯示此序列:10,11,12,9 ...在我的虛擬設備中,我有浮點列,但在我的真實手機點變成了逗號。 – lucignolo

+0

爲什麼要將整數存儲爲字符串?(如果sqlite整數太窄,也有可能足夠大的bigint)。認爲你明白了我的意思:對不同的列使用不同的強制轉換(如果有的話),如果你強制轉換爲浮動狀態,請使用替換來修復分隔符。 –

+0

謝謝安東,我將嘗試更改我的所有項目以管理int而不是字符串。 – lucignolo