PLSQL: получить слово между 3-м # и 4-м # в заданной машине сгенерированной строке - PullRequest
0 голосов
/ 25 февраля 2019

Я дал следующую строку:001

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Как насчет таких 2 вариантов:

  • result_1 использует подстроку регулярного выражения ( взять 3-е слово )
  • result_2 использует традиционный SUBSTR + INSTR комбинация

SQL> with test (col) as
  2    (select '#152#005#001#00000000000000000000#0#   #' from dual)
  3  select regexp_substr(col, '\w+', 1, 3) result_1,
  4         --
  5         substr(col, instr(col, '#', 1, 3) + 1,
  6                     instr(col, '#', 1, 4) - instr(col, '#', 1, 3) - 1) result_2
  7  from test;

RES RES
--- ---
001 001

SQL>
0 голосов
/ 25 февраля 2019

Один из вариантов здесь - использовать REGEXP_SUBSTR с группой захвата:

SELECT regexp_replace(your_string, '^#([^#]+#){2}([^#]+).*$', '\2') AS output
FROM your_table;

Демо

Вот объяснениеиспользуемый шаблон регулярных выражений ^#([^#]+#){2}([^#]+).*$:

^             from the start of the string
#             match an initial #
([^#]+#){2}   followed by two paths (consume 152#005#)
([^#]+)       then match and consume the third term (001)
.*            consume the rest of the string
$             until the end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...