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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值