如何在 plsql 的正则表达式中排除子字符串"TEMP"但包含字符串"TEMPLATE"



如何排除子字符串"TEMP";但包括字符串";模板";plsql中的正则表达式中。

我正在尝试使用下面这样的条件,但所有都被排除在之外

代码:

SELECT TABLE_NAME
from all_tables
where not regexp_like( table_name, '_(TEMP)')
and     regexp_like( table_name, 'TEMPLATE');

您真的需要正则表达式吗?怎么样

select table_name
from all_tables
where instr(table_name, 'TEMPLATE') > 0

如果事情没有那么简单(根据你的评论(,那么考虑一下这样的事情:

SQL> WITH
2     all_tables (table_name)
3     AS
4        (SELECT 'MY_TEMPLATE' FROM DUAL   -- OK
5         UNION ALL
6         SELECT 'EXC_ABC' FROM DUAL       -- not OK, contains _ABC
7         UNION ALL
8         SELECT 'EMP' FROM DUAL           -- OK
9         UNION ALL
10         SELECT 'DEPT' FROM DUAL          -- OK
11         UNION ALL
12         SELECT 'YOUR_TEMPXX2' FROM DUAL) -- not OK, contains _TEMP
13  SELECT *
14    FROM all_tables
15   WHERE    NOT REGEXP_LIKE (table_name, '_(TEMP|ABC|DEF|XYZ)|[[:digit]]')
16         OR REGEXP_LIKE (table_name, 'TEMPLATE');
TABLE_NAME
------------
MY_TEMPLATE
EMP
DEPT
SQL>

您可以将组合逻辑与AND一起使用,OR包含单词TEMPLATE的异常,如

WHERE ( table_name NOT LIKE '%TEMP%' AND table_name NOT LIKE '%TEMPLATE%' )
OR   table_name LIKE '%TEMPLATE%' 

演示

最新更新