当前位置: 服务支持 >  技术文档 >  MySQL中字符串的排序方法

MySQL中字符串的排序方法

阅读数 96
点赞 30
copyright 著作权
article_banner

备注:测试数据库版本为MySQL 8.0

如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本

一.需求

对表中的字符串,按字母顺序排列其中的各个字符。
例如:
+--------+
| ename |
+--------+
| SMITH |
| ALLEN |
| WARD |
| JONES |
| MARTIN |
| BLAKE |
| CLARK |
| SCOTT |
| KING |
| TURNER |
| ADAMS |
| JAMES |
| FORD |
| MILLER |
+--------+

需要结果如下所示:
+----------+----------+
| old_name | new_name |
+----------+----------+
| ADAMS | AADMS |
| ALLEN | AELLN |
| BLAKE | ABEKL |
| CLARK | ACKLR |
| FORD | DFOR |
| JAMES | AEJMS |
| JONES | EJNOS |
| KING | GIKN |
| MARTIN | AIMNRT |
| MILLER | EILLMR |
| SCOTT | COSTT |
| SMITH | HIMST |
| TURNER | ENRRTU |
| WARD | ADRW |
+----------+----------+

二.解决方案

使用MySQL自带的group_concat可以很轻易的解决这个问题

代码:

select ename, group_concat(c order by c separator '')
  from (
select ename,substr(a.ename,iter.pos,1) c
  from emp a,
       ( select id pos from t10 ) iter
where iter.pos <= length(a.ename)
       ) x
gorup by ename

测试记录:

mysql> select ename old_name,
    ->        group_concat(c order by c separator '') new_name
    ->   from (
    -> select ename,substr(a.ename,iter.pos,1) c
    ->   from emp a,
    ->        ( select id pos from t10 ) iter
    -> where iter.pos <= length(a.ename)
    ->        ) x
    -> group by ename;
+----------+----------+
| old_name | new_name |
+----------+----------+
| ADAMS    | AADMS    |
| ALLEN    | AELLN    |
| BLAKE    | ABEKL    |
| CLARK    | ACKLR    |
| FORD     | DFOR     |
| JAMES    | AEJMS    |
| JONES    | EJNOS    |
| KING     | GIKN     |
| MARTIN   | AIMNRT   |
| MILLER   | EILLMR   |
| SCOTT    | COSTT    |
| SMITH    | HIMST    |
| TURNER   | ENRRTU   |
| WARD     | ADRW     |
+----------+----------+
14 rows in set (0.00 sec)

mysql>
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空