使用正则表达式替换 select 语句中的 where 子句
Using Regular expression to replace where clause in select statement
基本上我想用正则表达式替换下面 select 语句中的 where 子句。 (这里有三个条件;1.所有者名称 2.table被包含 3.table被排除)
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$)')
到目前为止我做了什么?
在下面的 select 语句中,我写了 REGEXP_LIKE 以获得 table 以 A 或 B 或 C 结尾的名称,并且对于那些 table 相同的 NOT REGEXP_LIKE遵循 (P|Q)(R|S)*(_D)) 等模式且需要排除的名称。
我知道这种方式 REGEXP_LIKE 而不是 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');
您可能添加了额外的 WHERE
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX' AND
REGEXP_LIKE(table_name,'(.*)((A|B|C)$)', 'i') AND
NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i');
如果我理解您要执行的操作,那么以下操作应该可行:
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX' AND
REGEXP_LIKE (table_name, '[ABC]$', 'i') AND
NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i')
第一个正则表达式为 "Accept any name with characters in the class [ABC] just before the end of the line"。我使用了你给定的第二个正则表达式。
祝你好运。
基本上我想用正则表达式替换下面 select 语句中的 where 子句。 (这里有三个条件;1.所有者名称 2.table被包含 3.table被排除)
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$)')
到目前为止我做了什么?
在下面的 select 语句中,我写了 REGEXP_LIKE 以获得 table 以 A 或 B 或 C 结尾的名称,并且对于那些 table 相同的 NOT REGEXP_LIKE遵循 (P|Q)(R|S)*(_D)) 等模式且需要排除的名称。
我知道这种方式 REGEXP_LIKE 而不是 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');
您可能添加了额外的 WHERE
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX' AND
REGEXP_LIKE(table_name,'(.*)((A|B|C)$)', 'i') AND
NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i');
如果我理解您要执行的操作,那么以下操作应该可行:
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX' AND
REGEXP_LIKE (table_name, '[ABC]$', 'i') AND
NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i')
第一个正则表达式为 "Accept any name with characters in the class [ABC] just before the end of the line"。我使用了你给定的第二个正则表达式。
祝你好运。