SQLite排序问题

时间:2010-12-06 16:53:48

标签: android sqlite sorting

我在Android应用程序中使用SQLite DB。

列中有数字和字符串。类似的东西:

3,1,2,6 / 6A,X,3A,10,12,XY,44,ZW

如果我选择此列的值并对其进行排序,我会得到:

1,10,12,2,3,3A,44,6 / 6A,X,XY,ZW

SQLite 是否有可能对这些值进行排序,以便我得到:

1,2,3,3A,6 / 6A,10,12,44,X,XY,ZW

谢谢,

穆尔

3 个答案:

答案 0 :(得分:1)

您可以根据需要对纯数字和纯字符串进行排序,只需将数字存储为数字(您当前将所有内容存储为字符串)。

混合动力车(3A6A)比较棘手。一种选择是提取数字前缀并将其存储在排序列中(以及未修改的其他值):

original sort
   1      1
   2      2
   6A     6
   6      6
   3A     3
   X      X
   XY     XY

然后按排序列排序,后跟原始列:

SELECT * FROM MyTable
 ORDER BY sort, original

答案 1 :(得分:1)

经过多次实验后,我得到了一个正确的查询:

select _id, case 
when cast(_id as number) = 0 then _id
when cast(_id as number) <>0 then cast(_id as number)
end as sorting
from lines
order by sorting

好处是,施法操作返回'6 / 6A'6。

<强> UPD

不知道为什么,但如果我在我的Android应用程序中使用此查询,我将_id列作为数字,所以我必须进行转换为文本

select cast(_id as text) as _id, case 
when cast(_id as number) = 0 then _id
when cast(_id as number) <>0 then cast(_id as number)
end as sorting
from lines
order by sorting

答案 2 :(得分:0)

受到Tima和Marcelo Cantos解决方案的启发,我找到了以下解决方案:

SELECT * FROM MyTable ORDER BY CAST(original AS INTEGER), original;