我试图获取所有包含字符串" 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。
谢谢
答案 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)
获取不区分大小写的匹配更简单,因为您不需要将正则表达式的内容转换为大写。