我在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
谢谢,
穆尔
答案 0 :(得分:1)
您可以根据需要对纯数字和纯字符串进行排序,只需将数字存储为数字(您当前将所有内容存储为字符串)。
混合动力车(3A
和6A
)比较棘手。一种选择是提取数字前缀并将其存储在排序列中(以及未修改的其他值):
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;