2010-06-23 74 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); 

得到表信息。