2010-06-23 71 views
5

我正在開發Android應用程序,其中用戶有不同的選項來排序來自數據庫的顯示數據。目前我的排序依據的字符串,我傳遞給機器人會查詢()方法是這樣的:確定SQLite中列的數據類型

"LOWER("+columnName+") ASC" 

這樣做的問題是,如果由COLUMNNAME指定的列的數據類型是它整數,調用LOWER()將導致它按字母順序排序,即僅基於最左邊的數字,這對數字數據當然沒有任何意義。因此,如果列的數據類型不是整數,我只想應用LOWER()。我想到的是這樣一個說法:

"CASE WHEN [data type of columnName is integer] THEN "+columnName+" ASC ELSE LOWER("+columName+") ASC END" 

括號內的部分是我不知道該怎麼做。 SQLite是否提供了一個函數來確定列的數據類型?

回答

10

您確實需要列的類型的值的類型值? (SQLite is dynamically-typed,所以區別很重要。)

如果您想要後者,您可以使用typeof(columnName)

+0

就我而言,這並不重要。值的類型應該與列的類型匹配。所以typeof(columnName)應該完美地工作。非常感謝你。 – 2010-06-24 07:19:17

0

您在設置表格時是否將該列聲明爲整數?否則,sqlite會將它作爲文本存儲,並按照你所描述的方式進行排序。

create table if not exists exampletable (columnName integer); 
+0

是的,我將數字列聲明爲整數。如果我刪除對LOWER()的調用,那麼整數列將根據需要進行排序。但是當然,LOWER()調用是有原因的,因爲這就是我想要對文本列進行排序的方式。 – 2010-06-23 21:07:42

6

用途:

PRAGMA table_info(table-name); 

得到表信息。