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)
获得不区分大小写的匹配更简单,因为您不需要将正则表达式的内容转换为大写。
我正在尝试获取在 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)
获得不区分大小写的匹配更简单,因为您不需要将正则表达式的内容转换为大写。