REGEXP_LIKE 在两个字符串之间寻找一个字符串

REGEXP_LIKE to Look for a String between Two Strings

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

谢谢

正则表达式中的星号适用于 * 之前的符号。在你的例子中是 (,这是另一个 元字符 ,使你的表达式不合法。

这应该有效:

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.