str 中以 A 开头的任何单词都应该放在 str1 中,其余的都放在 str2 中。
要在纯 SQL 中实现它,我将使用以下内容:
- REGEXP_SUBSTR
- 列表
- SUBSTR
- 内联视图
所以,首先我将使用Split single comma delimited string into rows 此处演示的技术拆分逗号分隔的字符串。
然后,我将使用 LISTAGG 将它们按顺序聚合。
例如,
SQL> WITH
2 t1 AS (
3 SELECT 'Aaa,Bbb,Abb,Ccc' str FROM dual
4 ),
5 t2 AS (
6 SELECT trim(regexp_substr(str, '[^,]+', 1, LEVEL)) str
7 FROM t1
8 CONNECT BY LEVEL <= regexp_count(str, ',')+1
9 ORDER BY str
10 )
11 SELECT
12 (SELECT listagg(str, ',') WITHIN GROUP(
13 ORDER BY NULL) str1
14 FROM t2
15 WHERE SUBSTR(str, 1, 1)='A'
16 ) str1,
17 (SELECT listagg(str, ',') WITHIN GROUP(
18 ORDER BY NULL) str
19 FROM t2
20 WHERE SUBSTR(str, 1, 1)<>'A'
21 ) str2
22 FROM dual
23 /
STR1 STR2
---------- ----------
Aaa,Abb Bbb,Ccc
SQL>
WITH 子句仅用于演示目的,在您的实际场景中,删除 with 子句并直接使用您的表名。虽然使用 WITH 子句看起来很整洁。