备注:测试数据库版本为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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
目录