首页 > 解决方案 > 如何在plsql的正则表达式中排除子字符串“TEMP”但包含字符串“TEMPLATE”

问题描述

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

我正在尝试使用如下条件,但都被排除在外

代码:

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

标签: sqloracleregexp-like

解决方案


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

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>

推荐阅读