ITPub博客

首页 > 数据库 > Oracle > Oracle如何拆分字符串

Oracle如何拆分字符串

原创 Oracle 作者:a960549548 时间:2024-06-14 17:31:25 0 删除 编辑

有些场景要求把字符串拆分为单个字符,比如:

CREATE OR REPLACE VIEW V AS SELECT ' 天天向上 ' AS 汉字 , 'TTXS' AS 首拼 FROM DUAL;

 

需求把每个汉字都拆为单独一行


SELECT * FROM V

 

为了核对表中保存的 “ 首拼 ” 是否正确,需要把字符串拆分为下面的样式:

汉字   首拼

天     T

天     T

向     X

上     S

 

拆分前,看下一个 CONNECT BY 子句:

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 4;

 

其实, CONNECT BY 是树形查询中的一个子句,后面的 LEVEL 是一个 “ 伪列 ” ,表示树形中的级别层级,通过 LEVEL<=4 循环了 4 次,就生成了上面所示的数据。

 

那么我们就可以通过 CONNECT BY 子句把视图 V 循环 4 行,并给出定位标识 LEVEL :

SELECT V. 汉字 , V. 首拼 , LEVEL FROM V CONNECT BY LEVEL <= LENGTH(V. 汉字 );

TTXS  TTXS  TTXS

 

根据上面的数据,就可以通过函数 substr(V. 汉字 ,LEVEL,?) 得到需要的结果:

 

SELECT V. 汉字 , V. 首拼 , LEVEL, SUBSTR(V. 汉字 ,LEVEL,1) AS 汉字拆分 , SUBSTR(V. 首拼 ,LEVEL,1) AS 首拼拆分 ,'substr('''||V. 汉字 ||''','||LEVEL||',1)' AS FUN FROM V CONNECT BY LEVEL <= LENGTH(V. 汉字 );

LEVEL

 

为了方便理解,我把 LEVEL 的值和每一行实际执行的 substr 语句也就是 FUN 都显示出来了。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3018852/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE,MySQL 8.0 OCP,PMP,拥有OceanBase OBCP,TiDB PCTP,GoldenDB GDCP等多项认证,ITPUB认证专家,微信公众号:DBA之友。

注册时间:2022-02-08

  • 博文量
    132
  • 访问量
    171519