Как я могу извлечь строку в Oracle

Я хотел бы извлечь следующую строку в Oracle. Как я могу это сделать?

  • Исходная строка: 011113584378(+) CARD, STAFF
  • Ожидаемая строка: STAFF CARD

2 ответа

Хорошо, я укушу Этот пример использует REGEXP_REPLACE для описания строки, сохраняя части, которые вам нужны, чтобы переставить их перед возвратом. Было бы лучше, если бы вы показали несколько реальных примеров данных, с которыми вы имеете дело, поскольку я могу только гарантировать, что этот пример будет работать с той строкой, которую вы указали.

Регулярное выражение совпадает с любыми символами, начинающимися в начале строки и заканчивающимися близким пробелом. Следующий набор любых символов до или без запятой "запоминается", заключая их в скобки. Это называется захваченной группой. Следующая захваченная группа - это набор символов после этого разделителя запятых до конца строки (знак доллара). Захваченные группы упоминаются в порядке их следования слева направо. Третий аргумент - это возвращаемая строка, которая является 2-й и 1-й захваченными группами в указанном порядке, разделенными пробелом.

SQL> with tbl(str) as (
     select '+011113584378(+) CARD, STAFF' from dual
   )
   select regexp_replace(str, '^.*\) (.*), (.*)$', '\2 \1') formatted
   from tbl;

FORMATTED
----------
STAFF CARD

SQL>

Я полагаю, у вас есть возможность написать функцию PL/SQL? Затем просто используйте "SUBSTR" и / или "INSTR", и || оператор конкатенации для анализа вашего ввода.

Вот пример:

https://www.techonthenet.com/oracle/questions/parse.php

... Поле может содержать следующее значение:

F:\Siebfile\YD\S_SR_ATT_1-60SS_1-AM3L.SAF

В этом случае мне нужно вернуть значение "1-60SS", так как это значение находится между 3-м и 4-м подчеркиванием.

РЕШЕНИЕ:

create or replace function parse_value (pValue varchar2)
   return varchar2
is
   v_pos3 number;
   v_pos4 number;

begin

   /* Return 3rd occurrence of '_' */
   v_pos3 := INSTR (pValue, '_', 1, 3) + 1;

   /* Return 4rd occurrence of '_' */
   v_pos4 := INSTR (pValue, '_', 1, 4);

   return SUBSTR (pValue, v_pos3, v_pos4 - v_pos3);

end parse_value;
Другие вопросы по тегам