首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[字符]-[编号]

[字符]-[编号]
EN

Stack Overflow用户
提问于 2020-04-16 14:35:12
回答 1查看 197关注 0票数 0

我有下面的sqlite记录。这是id字段:

代码语言:javascript
复制
id
=====
B-1
B-2
B-10
B-11

我想分类如下:

代码语言:javascript
复制
B-1
B-2
B-10
B-11

但当我分类的时候,它是按以下方式排序的:

代码语言:javascript
复制
B-1
B-10
B-11
B-2

这是sql

代码语言:javascript
复制
select * from mytable
order by id

我怎样才能把它分类为:

代码语言:javascript
复制
B-1
B-2
B-10
B-11

所有数据的格式如下:

代码语言:javascript
复制
[character]-[number]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-16 14:38:02

您必须首先按照破折号前的id字符串部分对表进行排序,然后再按破折号后面的数字排序。

因此,需要字符串函数来提取字符串和列的数字部分:

代码语言:javascript
复制
select * from mytable
order by 
  substr(id, 1, instr(id, '-')),
  substr(id, instr(id, '-') + 1) + 0

算术运算符+将强制将字符串的数字部分隐式转换为数字。

演示

如果ids的模式与示例数据完全相同,并且开头总是有一个字母,后面跟着一个破折号,然后是数字,那么代码可以简化:

代码语言:javascript
复制
select * from mytable
order by
  substr(id, 1, 1),
  substr(id, 3) + 0 

演示

结果:

代码语言:javascript
复制
| id   |
| ---- |
| B-1  |
| B-2  |
| B-10 |
| B-11 |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61252910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档