Как извлечь определенную c часть столбца, используя REGEXP в oracle? - PullRequest
0 голосов
/ 11 марта 2020

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

NAME                                                                            
--------------------------------------------------------------------------------
EXISTS(SELECT 1 from a where SUBSTR(a.hehrircal,1,4)=b.acc_num                  
EXISTS(SELECT 1 from a where a.group_id=b.acc_num

Я хочу извлечь деталь после , где - = .Мы ожидали вывод:

 NAME                                                                            
--------------------------------------------------------------------------------
SUBSTR(a.hehrircal,1,4)                  
a.group_id

Итак, я попробовал вот так:

select REGEXP_REPLACE(name,'^[EXISTS(SELECT 1 from a where]',1,6) from ot.plan;

Но это не работает. Можно ли извлечь такую ​​часть в oracle?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вам не нужны (медленные) регулярные выражения и вы можете использовать простые строковые функции:

SELECT SUBSTR( name, start_pos, end_pos - start_pos ) AS match
FROM   (
  SELECT name,
         INSTR( LOWER(name), ' where ' ) + LENGTH( ' where ') AS start_pos,
         INSTR( name, '=', INSTR( LOWER(name), ' where ' ) ) AS end_pos
  FROM   table_name
)

Итак, для ваших примеров данных:

CREATE TABLE table_name ( NAME ) AS
SELECT 'EXISTS(SELECT 1 from a where SUBSTR(a.hehrircal,1,4)=b.acc_num' FROM DUAL UNION ALL
SELECT 'EXISTS(SELECT 1 from a where a.group_id=b.acc_num' FROM DUAL

Это выводит:

| MATCH                   |
| :---------------------- |
| SUBSTR(a.hehrircal,1,4) |
| a.group_id              |

дБ <> скрипка здесь

1 голос
/ 11 марта 2020

Вы можете использовать substr и instr следующим образом:

SQL> with your_Data as
  2  (select 'EXISTS(SELECT 1 from a where SUBSTR(a.hehrircal,1,4)=b.acc_num' as str from dual)
  3  SELECT SUBSTR(STR, INSTR(STR, 'where') + 5, INSTR(STR, '=') -(INSTR(STR, 'where') + 5))
  4  FROM YOUR_DATA;

SUBSTR(STR,INSTR(STR,'WH
------------------------
 SUBSTR(a.hehrircal,1,4)

SQL>

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...