【发布时间】:2019-09-18 16:47:06
【问题描述】:
基本上,我想使用正则表达式替换下面 select 语句中的 where 子句。 (这里有三个条件:1.所有者名称2.要包含的表3.要排除的表)
SELECT *
FROM all_tables
WHERE owner = 'XXXXXXXX'
AND (table_name LIKE '%_\_A' ESCAPE '\'
OR table_name LIKE '%_\_B' ESCAPE '\'
OR table_name LIKE '%_\_C' ESCAPE '\')
AND (table_name NOT LIKE statement for (P|Q)(R|S)D(.*)(_D$)')
到目前为止我做了什么?
在下面的选择语句中,我编写了 REGEXP_LIKE 来获取以 A 或 B 或 C 结尾的表名,对于遵循 (P|Q)(R|S)*(_D)) 和需要排除。
我知道这种方式 REGEXP_LIKE 和 NOT REGEXP_LIKE 不起作用,谁能帮我找到上述 2 的一个正则表达式(regexp_like 而不是 regexp_like)。非常感谢
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX'
AND REGEXP_LIKE (table_name, '(.*)((A|B|C)$)', 'i')
AND WHERE NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i');
【问题讨论】:
-
您使用的是 Oracle 还是 DB2?
-
非常感谢您的回复,我正在使用 Oracle。
-
关于您的第二个正则表达式的问题:括号应该是文字字符,还是您使用括号对表达式进行分组?谢谢。
-
上面使用的括号用于分组,例如 P 或 Q 在上面的示例中可以排在第一位,同样它应该只以 _D 结尾,因此将它们分组。
标签: sql oracle regexp-like