Java 使用正则表达式进行Sqlite排序

Java 使用正则表达式进行Sqlite排序,java,android,regex,sqlite,sorting,Java,Android,Regex,Sqlite,Sorting,使用正则表达式进行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("

使用正则表达式进行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。

问题在于GLOB regex,改为

GLOB '[0-9]*'

让事情运行得更好,但以字母后跟数字开头的代码在字母后没有按数字排序(我希望的方式)。

要正确排序字母行,必须从字符串中提取该数字

选择*
从表名
当代码为GLOB'[0-9]*'然后为0时,按大小写排序
当代码为GLOB'[A-Z][0-9]*'时,则为substr(代码1,1)
其他代码
完,,
代码GLOB'[0-9]*'然后强制转换(代码为INT)时的情况
当代码为GLOB'[A-Z][0-9]*'时,则强制转换(substr(代码,2)为INT)
其他代码
结束

难道您不能使用自己的
比较器检索值并用Java对它们进行排序吗?
?如果在填充光标时发现这是不可能的,我会这样做。如果我可以使用db.query,那么我的代码就会简单得多。但不确定使用SQL查询是否会更简单。想象一下,稍后更改顺序/比较,并调试/修复该查询。。。使用
Comparator
可能也很重要,但至少调试起来更容易!在以字母开头的条目中,您能否假定它们总是以一个字母开头?在数字输入处,是否需要限制值?是的,以字母开头的代码始终为一个字母。仅仅是数字的代码可以是1到5位数。但是,那些有/的代码可能更长,因为它们实际上是两个带分隔符的代码。是的,但是对于不以字母开头的代码和那些有/的代码,这是朝着正确方向迈出的一步。希望有人能有更多的洞察力来获得这些排序。谢谢,什么是正则表达式来捕捉任何字母,而不仅仅是M GLOB'M[0-9]*'酷,快到了。。。然而,现在对以字母开头的代码进行排序:M01、P2、M02、P3、M03等。您认为有没有一种方法可以让它先对第一个字母进行排序,然后再对数字进行排序?谢谢你的帮助。顺便问一下,+1000000代表什么?字符数,行数?已修复-谢谢CL,非常感谢您的帮助!现在我知道我可以使用substr作为查询的一部分,这也将有助于处理其他内容。谢谢