使用android自然排序sqlite中的字母数字值

SKB*_*sha 5 sqlite sorting android

我有一个带字符的起始名称列表,并以数字结尾: -

ka1, ka10, ka 2, ka, sa2, sa1, sa10, p1a10, 1kb, p1a2, p1a11, p1a. 
Run Code Online (Sandbox Code Playgroud)

我想按自然顺序排序,即: -

1kb, ka, ka1, ka 2, ka10, p1a, p1a2, p1a10, p1a11, sa1, sa2, sa10. 
Run Code Online (Sandbox Code Playgroud)

我在这里看到的主要问题是文本和数字部分之间没有分隔符,也有可能没有数字部分.

我在android中使用sqlite,我可以通过缓存游标数据获取点后使用java进行排序,但我正在使用(建议使用)游标适配器.

请建议一个查询排序或有没有办法在游标中应用排序?

pra*_*enb 5

我尝试了以下自然排序查询:

SELECT 
    item_no
FROM
    items
ORDER BY 
   LENGTH(item_no), item_no;
Run Code Online (Sandbox Code Playgroud)

它在 Sqlite db 中也对我有用。请参阅此链接了解更多详细信息。


Aru*_*kar -1

更新

您可以使用不同的方法 - 下面提到了其中一些方法:

宾路

SELECT 
tbl_column, 
BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC
Run Code Online (Sandbox Code Playgroud)

施法方式

SELECT 
tbl_column, 
CAST(tbl_column as SIGNED) AS casted_column
FROM db_table
ORDER BY casted_column ASC , tbl_column ASC
Run Code Online (Sandbox Code Playgroud)

或尝试解决方案:

如果你谷歌一下,就会有很多解决方案,当然,你可以只使用 PHP 中的 natsort() 函数,但在 MySQL 中完成自然排序很简单:首先按长度排序,然后按长度排序。列值。

查询:SELECT alphanumeric, integer FROM sorting_test ORDER BY LENGTH(alphanumeric), alphanumeric这里