Ste*_*los 8 sqlite android types case
我正在开发一个Android应用程序,用户可以使用不同的选项来排序来自数据库的显示数据.目前我传递给Androids query()方法的orderBy字符串如下所示:
"LOWER("+columnName+") ASC"
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,如果columnName指定的列中的数据类型是整数,则在其上调用LOWER()将使其按字母顺序排序,即仅基于最左边的数字,这当然没有任何意义对于数字数据.因此,如果列的数据类型不是整数,我只想应用LOWER().我的想法是这样的声明:
"CASE WHEN [data type of columnName is integer] THEN "+columnName+" ASC ELSE LOWER("+columName+") ASC END"
Run Code Online (Sandbox Code Playgroud)
括号中的部分是我不知道该怎么做的.SQLite是否提供了确定列数据类型的函数?
直接取自有关SQLite 版本 3数据类型的 SQLite 文档 :
大多数 SQL 数据库引擎(据我们所知,除了 SQLite 之外的每个 SQL 数据库引擎)都使用静态、严格的类型。对于静态类型,值的数据类型由其容器(存储值的特定列)决定。
SQLite 使用更通用的动态类型系统。在 SQLite 中,值的数据类型与值本身相关联,而不是与其容器相关联。SQLite 的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上运行的 SQL 语句在 SQLite 中应该以相同的方式运行。然而,SQLite 中的动态类型允许它做传统严格类型数据库中不可能完成的事情。
柱亲和力:使用PRAGMA table_info(table-name);。PRAGMA table_info()给出一个包含列cid、name、type、notnull、dflt_value和 的表pk.
结果集中的列包括列名、数据类型、列是否可以为 NULL 以及列的默认值。对于不属于主键的列,结果集中的“pk”列为零;对于属于主键的列,“pk”列是主键中列的索引。
值的数据类型:用于typeof(column)查看 SQLite 实际如何存储值。
改编自第 3.4 节的示例:
CREATE TABLE t1(
t TEXT, -- text affinity by rule 2
nu NUMERIC, -- numeric affinity by rule 5
i INTEGER, -- integer affinity by rule 1
r REAL, -- real affinity by rule 4
no BLOB -- no affinity by rule 3
);
-- Values stored as TEXT, INTEGER, INTEGER, REAL, TEXT.
INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0', '500.0');
-- Values stored as TEXT, INTEGER, INTEGER, REAL, REAL.
INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0, 500.0);
-- Values stored as TEXT, INTEGER, INTEGER, REAL, INTEGER.
INSERT INTO t1 VALUES(500, 500, 500, 500, 500);
-- BLOBs are always stored as BLOBs regardless of column affinity.
INSERT INTO t1 VALUES(x'0500', x'0500', x'0500', x'0500', x'0500');
-- NULLs are also unaffected by affinity
INSERT INTO t1 VALUES(NULL,NULL,NULL,NULL,NULL);
Run Code Online (Sandbox Code Playgroud)
输出PRAGMA table_info(t1);:
0|t|TEXT|0||0
1|nu|NUMERIC|0||0
2|i|INTEGER|0||0
3|r|REAL|0||0
4|no|BLOB|0||0
Run Code Online (Sandbox Code Playgroud)
输出SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;(注意列中的每个值都有自己的数据类型):
text|integer|integer|real|text
text|integer|integer|real|real
text|integer|integer|real|integer
blob|blob|blob|blob|blob
null|null|null|null|null
Run Code Online (Sandbox Code Playgroud)