SQL преобразует один столбец в несколько строк на основе строкового шаблона - PullRequest
0 голосов
/ 06 июня 2018

У меня есть таблица со следующими примерами данных:

id, query
----------
25, normal query
25, query with brackets (example1) 
46, brackets in query (example2) (example3)
55, text1 (example4) text2

Для запросов, имеющих квадратные скобки, я хотел бы добавить в таблицу строку с информацией в каждой квадратной скобке следующим образом:

id, query
----------
25, normal query
25, query with brackets
25, example1
46, brackets in query
46, example2
46, example3
55, text1 text2
55, example4

Я могу легко идентифицировать строки, имеющие квадратные скобки, с помощью LIKE '%(%)%', однако я не уверен, как разбивать и добавлять новые строки.

Спасибо!

1 Ответ

0 голосов
/ 06 июня 2018
select 
  id,
  regexp_split_to_table(
    replace(query,')','')
  ,E'\\(') query
from TestTable

Результат:

| id |                query |
|----|----------------------|
| 25 |         normal query |
| 25 | query with brackets  |
| 25 |             example1 |
| 46 |   brackets in query  |
| 46 |            example2  |
| 46 |             example3 |

Демонстрационная ссылка SQL Fiddle


Для новыхВопрос:

Спасибо !!Не могли бы вы помочь с новой строкой 55?Я внес изменения в вопрос и потребовал вывода.

select 
  id,
  regexp_split_to_table(
    replace(
      replace(
        replace(
          query
          ,') (','(')        
        ,') ','( ')
    ,')','')
  ,E'\\(') query
from TestTable

Результат:

| id |                query |
|----|----------------------|
| 25 |         normal query |
| 25 | query with brackets  |
| 25 |             example1 |
| 46 |   brackets in query  |
| 46 |             example2 |
| 46 |             example3 |
| 55 |               text1  |
| 55 |             example4 |
| 55 |                text2 |

Демонстрационная ссылка SQL Fiddle

...