gpt4 book ai didi

java - 使用正则表达式的 Sqlite 排序

转载 作者:行者123 更新时间:2023-11-30 02:39:04 30 4
gpt4 key购买 nike

使用正则表达式的 Sqlite 排序

我在 sqlite 数据库文本字段(代码)中有一些行,其值如下:

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。

最佳答案

要正确排序带有字母的行,您必须从字符串中提取该数字。

SELECT *
FROM TableName
ORDER BY CASE WHEN codes GLOB '[0-9]*' THEN 0
WHEN codes GLOB '[A-Z][0-9]*' THEN substr(codes, 1, 1)
ELSE codes
END,
CASE WHEN codes GLOB '[0-9]*' THEN CAST(codes AS INT)
WHEN codes GLOB '[A-Z][0-9]*' THEN CAST(substr(codes, 2) AS INT)
ELSE codes
END

关于java - 使用正则表达式的 Sqlite 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038692/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com