Использование регулярного выражения для замены предложения where в операторе select - PullRequest
1 голос
/ 30 апреля 2019

В основном я хотел бы заменить предложение where из приведенного ниже оператора select с помощью регулярных выражений. (здесь есть три условия: 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$)')

Что я уже сделал?

В приведенном ниже утверждении select я написал REGEXP_LIKE, чтобы получить имя таблицы, оканчивающееся на A или B или C, и тот же NOT REGEXP_LIKE для тех имен таблиц, которые следуют шаблону, подобному (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');

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Если я понимаю, что вы пытаетесь сделать, должно работать следующее:

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')

Первое регулярное выражение говорит: «Примите любое имя с символами в классе [ABC] непосредственно перед концом строки». Я использовал ваше второе регулярное выражение как дано.

Удачи.

0 голосов
/ 30 апреля 2019

Возможно, вы включили дополнительный ГДЕ

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...