Это любое слово в str, начинающемся с A, должно идти в str1, все остальное в str2.
Для достижения этого в чистом SQL, я буду использовать следующее:
- REGEXP_SUBSTR
- LISTAGG
- SUBSTR
- INLINE VIEW
Итак, сначала я разделил строку с разделителями-запятыми, используя методы, как показано здесь 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.
Никогда когда-либо хранить данные в виде разделенных запятыми элементов. Это вызовет у вас массу проблем. SQL не предназначен для этого, вместо этого имеют отдельные строки. – jarlh
Добавление к комментарию @ jarlh - вы можете использовать вложенные таблицы или другие типы коллекций. – Rachcha