Получение текста из нескольких скобок - PullRequest
0 голосов
/ 07 января 2020

Для Oracle SQL

у меня есть следующий формат тега: {ABCDE,12345}{47,CE}

SELECT 
    [column a] 
    [column b] 
    [column c] 
FROM 
    [table name] 
WHERE 
    [*content of column d*] IN {ABCDE,12345} 
    [*content of column e*] IN {47,CE}

Поэтому мне нужен мой запрос, чтобы посмотреть, что в теге, и выбрать все строки с одинаковым содержимым, если: - столбец D = первый набор скобок - столбец E = содержимое второго набора

1 Ответ

0 голосов
/ 07 января 2020

Один из вариантов может быть таким (см. Комментарии в коде):

SQL> with test (col) as
  2    (select '{ABCDE,12345}{47,CE}' from dual),
  3  temp as
  4    -- remove leading and trailing brackets
  5    -- replace "middle" brackets with semi-colon (a new separator)
  6    (select replace(substr(col, 2, length(col) - 2), '}{', ';') val
  7     from test
  8    )
  9  select regexp_substr(val, '[^;]+', 1, level) result
 10  from temp
 11  connect by level <= regexp_count(val, ';') + 1;

RESULT
--------------------------------------------------------------------
ABCDE,12345
47,CE

SQL>

Ах, да - отдельные столбцы : тогда substr может помочь:

SQL> with test (col) as
  2    (select '{ABCDE,12345}{47,CE}' from dual)
  3  select substr(col, 2, instr(col, '}{') - 2) val1,
  4         substr(substr(col, instr(col, '}{') + 2),
  5                1,
  6                length(substr(col, instr(col, '}{') + 2)) - 1
  7               ) val2
  8  from test;

VAL1        VAL2
----------- -----
ABCDE,12345 47,CE

SQL>
...