Как использовать Regex в запросе Oracle SQL - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть эта сложная строка в базе данных, которая представляет 4 элемента, разделенных разделителями '|'

1944913|200010|157|4*
1944913|200085|157|1.22*

ПРИМЕЧАНИЕ: обе строки строк существуют в одной строке базы данных. В одной ячейке может быть до 10 строк строк

Я хочу команду oracle sql, которая, учитывая либо 200010, либо 200085, возвращает либо 1-й, либо второй элемент рядом с ней, например:

Учитывая 200010, возвращает 157 или возвращает 4 * Учитывая 200085, возвращает 157 или возвращает 1,22

Как бы я go сделал это?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вы можете использовать regexp_substr и instr для получения требуемых результатов:

select a.*,
      CASE WHEN instr(text1,'200085')>0 then REGEXP_SUBSTR (substr(text1,instr(text1,'200085'),500),'[^,|]+', 1, 2) 
          ELSE NULL END as partA,
      CASE WHEN instr(text1,'200085')>0 then REGEXP_SUBSTR (substr(text1,instr(text1,'200085'),500),'[^,|]+', 1, 3) 
          ELSE NULL END as partB
from tableA a

Просто замените '200085' на строку, которую вы ищете, и вам должно быть хорошо до go. Надеюсь, это поможет.

0 голосов
/ 20 февраля 2020

Вы можете легко разбить это на столбцы. Итак, я думаю, что-то вроде этого в значительной степени то, что вы хотите:

select regexp_substr(col, '[^|]+', 1, 2) as val_2,
       regexp_substr(col, '[^|]+', 1, 3) as val_3,
       regexp_substr(col, '[^|]+', 1, 4) as val_4

from t;
...