如何排除子字符串"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%'
演示