我有下面的sqlite记录。这是id字段:
id
=====
B-1
B-2
B-10
B-11我想分类如下:
B-1
B-2
B-10
B-11但当我分类的时候,它是按以下方式排序的:
B-1
B-10
B-11
B-2这是sql
select * from mytable
order by id我怎样才能把它分类为:
B-1
B-2
B-10
B-11所有数据的格式如下:
[character]-[number]发布于 2020-04-16 14:38:02
您必须首先按照破折号前的id字符串部分对表进行排序,然后再按破折号后面的数字排序。
因此,需要字符串函数来提取字符串和列的数字部分:
select * from mytable
order by
substr(id, 1, instr(id, '-')),
substr(id, instr(id, '-') + 1) + 0算术运算符+将强制将字符串的数字部分隐式转换为数字。
见演示。
如果ids的模式与示例数据完全相同,并且开头总是有一个字母,后面跟着一个破折号,然后是数字,那么代码可以简化:
select * from mytable
order by
substr(id, 1, 1),
substr(id, 3) + 0 见演示。
结果:
| id |
| ---- |
| B-1 |
| B-2 |
| B-10 |
| B-11 |https://stackoverflow.com/questions/61252910
复制相似问题