MySQL 遍历字符

备注:测试数据库版本为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>

你可能感兴趣的:(#,MySQL,CookBook,MySQL从小工到专家之路,字符串,mysql,sql,遍历字符串)