首页 > 数据库 > Oracle > Oracle如何拆分字符串
有些场景要求把字符串拆分为单个字符,比如:
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. 汉字 );
根据上面的数据,就可以通过函数 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 的值和每一行实际执行的 substr 语句也就是 FUN 都显示出来了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3018852/ ,如需转载,请注明出处,否则将追究法律责任。