0
点赞
收藏
分享

微信扫一扫

处理字符串_2_遍历字符串里的每个值


                           遍历字符串里的每个值

需求描述

需求:打印出ename为’King’的名字里每一个字母,每个字母占一行.

解决方法:通过自增表和emp表先cross join(笛卡尔积),然后再通过ename的len(ename的长度)进行过滤,最终得到显示每个字母的结果.

注: 数据库数据集SQL脚本详见如下链接地址

​​员工表结构和数据初始化SQL脚本​​

SQL代码

--SQL Server:
SELECT SUBSTRING(e.ENAME,seq.pos,1) AS ename_Split
FROM (SELECT ENAME FROM emp WHERE ename = 'KING' ) e,
(SELECT number AS pos FROM master.[dbo].[spt_values] WHERE type = 'P' AND number>0) seq
WHERE seq.pos<=LEN(e.ename)

执行结果

处理字符串_2_遍历字符串里的每个值_数据库

处理字符串_2_遍历字符串里的每个值_数据库_02

处理字符串_2_遍历字符串里的每个值_字符串_03

--Oracle:
WITH t(num) AS (
SELECT 1 FROM DUAL
UNION ALL
SELECT t.num+1
FROM t WHERE t.num<100
)

SELECT SUBSTR(e.ENAME,seq.num,1) AS ename_Split FROM
(SELECT ENAME FROM emp WHERE ename = 'KING' ) e,
(SELECT num FROM t)seq
WHERE seq.num<=LENGTH(e.ename)

--Mysql 8.0:
WITH RECURSIVE cte (num) AS
(
SELECT 1
UNION ALL
SELECT num + 1 FROM cte WHERE num < 100
)

SELECT SUBSTRING(e.ENAME,seq.num,1) AS ename_Split FROM
(SELECT ENAME FROM emp WHERE ename = 'KING' ) e,
(SELECT num FROM cte)seq
WHERE seq.num<=LENGTH(e.ename)

 

举报

相关推荐

0 条评论