2015-04-23 3 views
1

Я пытаюсь получить все значения, которые имеют строку «table1» между UPDATE и SET. В моем примере кода я ожидаю получить первую и вторую запись. Вы можете помочь мне с regexp_like.REGEXP_LIKE для поиска строки между двумя строками

WITH tbl AS 
(

SELECT 'UPDATE table1, table2, table1_abc SET' as col1 FROM DUAL 
UNION 
SELECT 'UPDATE table1_xyz, table2 SET' as col1 FROM DUAL 
UNION 
SELECT 'UPDATE table3 SET' as col1 FROM DUAL 
) 
SELECT * FROM tbl WHERE REGEXP_LIKE (upper(col1), 'UPDATE(*table1*)SET') 

Следовательно, я использую Oracle SQL Developer.

Спасибо

ответ

2

Звездочки в регулярном выражении относится к символу, прежде чем *. В вашем случае это (, что является еще одним метасимволом, что делает ваше выражение незаконным.

Это должно работать:

WITH tbl AS 
(
SELECT 'UPDATE table1, table2, table1_abc SET' as col1 FROM DUAL 
UNION 
SELECT 'UPDATE table1_xyz, table2 SET' as col1 FROM DUAL 
UNION 
SELECT 'UPDATE table3 SET' as col1 FROM DUAL 
) 
SELECT * FROM tbl WHERE REGEXP_LIKE (col1, 'UPDATE.*table1.*SET', 'i') 

Обратите внимание, что передача 'i' в качестве третьего параметра является более простым, чем при использовании upper(col1), чтобы получить матч регистронезависимого, потому что вам не нужно, чтобы преобразовать содержимое вашего регулярного выражения в верхний дело.

Demo.