【发布时间】:2014-11-20 05:35:37
【问题描述】:
使用正则表达式进行Sqlite排序
我在 sqlite db 文本字段(代码)中有行,其值如下:
M1
M2/4527
M101
1
2/5
3/1003
101
102
我希望对所有以数字开头的行进行排序,然后是所有以字母 A 到 Z 开头的代码。
这是我最近得到的
rawdata = database.rawQuery("SELECT * FROM tablename ORDER BY CASE WHEN " + codes + " GLOB '*^[0-9]*' THEN CAST(" + codes + " AS INTEGER) ELSE CAST(" + codes + " AS TEXT) END, " + codes + " COLLATE NOCASE ASC", null);
这给了我这个:
1
101
102
2/5
3/1003
M1
M101
M2/4527
我想要达到的排序顺序是:
1
2/5
3/1003
101
102
M1
M2/4527
M101
包含斜线的代码如果更简单,可以忽略斜线和后面的字符,只要斜线前面的字符按照我的要求排序。所以 2/5 就是 2,3/1003 就是 3。
【问题讨论】:
-
您不能使用自己的
Comparator检索值并使用 Java 对它们进行排序吗? -
如果在填充光标时证明这是不可能的,我会的。如果我可以使用 db.query 来完成,我的代码会变得更加简单。
-
不确定 SQL 查询是否更简单。想象一下,稍后更改顺序/比较,并调试/修复该查询......这对于
Comparator来说可能并不简单,但至少更容易调试! -
在以字母开头的条目中,你能假设它们总是以一个字母开头吗?在数字条目中,是否有预期的限值?
-
是的,以字母开头的代码将始终是一个字母。只是数字的代码可以是 1 到 5 位数字。然而,那些有 / 的可能会更长,因为它们实际上是两个带有分隔符的代码。
标签: java android regex sqlite sorting