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

时间:2016-04-14 09:26:55

标签: android sqlite sorting

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

ka1, ka10, ka 2, ka, sa2, sa1, sa10, p1a10, 1kb, p1a2, p1a11, p1a. 

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

1kb, ka, ka1, ka 2, ka10, p1a, p1a2, p1a10, p1a11, sa1, sa2, sa10. 

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

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

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

3 个答案:

答案 0 :(得分:2)

回复,对某人有帮助

我在下面尝试了自然排序的查询,

SELECT 
    item_no
FROM
    items
ORDER BY LENGTH(item_no) , item_no;

它也适用于Sqlite数据库。有关详细信息,请参阅此link

答案 1 :(得分:0)

我可以建议使用正则表达式替换添加零,创建原始值和相应值的临时表,然后按照此链接对其进行排序:http://www.saltycrane.com/blog/2007/12/how-to-sort-table-by-columns-in-python/ 正则表达式的提示在最后一个字母后添加尽可能多的零,但限制预测的最大位数的总位数。如果您还需要有关正则表达式的帮助,请提供有效和无效值的确切信息,因此也可以暂停。 PS如果想要确保零点在最后一位数字之前搜索到最后的字符

答案 2 :(得分:-1)

<强>更新

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

BIN Way

SELECT 
tbl_column, 
BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC

施法方式

SELECT 
tbl_column, 
CAST(tbl_column as SIGNED) AS casted_column
FROM db_table
ORDER BY casted_column ASC , tbl_column ASC

或尝试解决方案:

  

如果你点击谷歌,那里有很多解决方案   当然,你可以在PHP中使用natsort()函数,但它是   简单到足以在MySQL中完成自然排序:按长度排序   首先,然后是列值。

     

查询:来自hereSELECT alphanumeric, integer FROM sorting_test ORDER BY LENGTH(alphanumeric), alphanumeric

相关问题