如何解决在 REGEXP_SUBSTR 中使用 connect by by 不会将结果破坏为多行
SELECT CHR(91)||'a-zA-Z0-9._%-'||CHR(93)||'+'|| listagg(REGEXP_SUBSTR('aaa@yahoo.com,bbb@hotmail.com','@'||CHR(91)||'^,'||CHR(93)||'+',1,LEVEL),',') within group (order by level) as domain
FROM DUAL
CONNECT BY REGEXP_SUBSTR('aaa@yahoo.com,LEVEL) IS NOT NULL
order by 1;
上面的脚本只有@yahoo.com前面的正则表达式
[a-zA-Z0-9._%-]+@yahoo.com,@hotmail.com
预期结果:
[a-zA-Z0-9._%-]+@yahoo.com,[a-zA-Z0-9._%-]+@hotmail.com
解决方法
当然;将它们聚合回来。
SQL> SELECT listagg(REGEXP_SUBSTR('aaa@yahoo.com,bbb@hotmail.com','@'||CHR(91)||'^,'||CHR(93)||'+',1,LEVEL),',') within group (order by level) as domain
2 FROM DUAL
3 CONNECT BY REGEXP_SUBSTR('aaa@yahoo.com,LEVEL) IS NOT NULL
4 order by 1;
DOMAIN
----------------------------------------------------------------------------------------------------
@yahoo.com,@hotmail.com
SQL>
如果你想把regexp前缀放在所有域中,那么
SQL> SELECT LISTAGG ( '[a-zA-Z0-9._%-]+'
2 || REGEXP_SUBSTR ('aaa@yahoo.com,3 '@' || CHR (91) || '^,' || CHR (93) || '+',4 1,5 LEVEL),6 ',')
7 WITHIN GROUP (ORDER BY LEVEL) AS domain
8 FROM DUAL
9 CONNECT BY REGEXP_SUBSTR ('aaa@yahoo.com,10 '@' || CHR (91) || '^,11 1,12 LEVEL)
13 IS NOT NULL;
DOMAIN
-----------------------------------------------------------------------------------------------
[a-zA-Z0-9._%-]+@yahoo.com,[a-zA-Z0-9._%-]+@hotmail.com
SQL>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。