暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 遍历字符

原创 只是甲 2020-09-16
1120

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

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

一.需求

遍历一个字符,并将其中的每个字符都作为一行返回,但是sql没有循环操作

例如:
要将表EMP中ENAME值为’KING’的字符串显示为4行,每行中都包含"KING"中的一个字符

二.解决方案

使用笛卡尔积生成行号,用来在该行中返回字符串中的每个字符。
然后使用MySQL内置的字符串分析函数来摘出所要的字符。

代码:

-- 解决 t10这样一个表来形成笛卡尔积

select substr(e.ename,iter.pos,1) as C
  from (select ename from emp where ename = 'KING') e,
       (select id as pos from t10) iter
where iter.pos <= length(e.ename)
复制

测试记录:

mysql> create table t10(id int);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t10 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> select * from t10;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
|    8 |
|    9 |
|   10 |
+------+
10 rows in set (0.00 sec)

mysql> select substr(e.ename,iter.pos,1) as C
    ->   from (select ename from emp where ename = 'KING') e,
    ->        (select id as pos from t10) iter
    -> where iter.pos <= length(e.ename);
+------+
| C    |
+------+
| K    |
| I    |
| N    |
| G    |
+------+
4 rows in set (0.00 sec)

mysql>
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

目录
  • 一.需求
  • 二.解决方案