REGEXP_LIKE在两个字符串之间查找字符串

时间:2015-04-23 15:48:26

标签: sql regex oracle oracle-sqldeveloper

我试图获取所有包含字符串" table1"的值。在UPDATE和SET之间。在我的示例代码中,我希望获得第一和第二条记录。你能用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。

谢谢

1 个答案:

答案 0 :(得分: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.