Использование REGEXP_LIKE в Oracle - PullRequest
0 голосов
/ 30 ноября 2018

В таблице MyTable у меня есть следующие данные в столбце MyField, размер которого составляет 80 символов:

MyField
-------
WA
W
W51534
W
W

Я пытаюсь исключить строки, начинающиеся с WA до regexp_like.Но следующий запрос возвращает строку W51534, а не строки W:

select MyField
    from MyTable
    where regexp_like (upper (ltrim (MyField)), '^ [W][^A]');

Я бы хотел, чтобы она также возвращала строки W. Как я могу это сделать?

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Наконец, я решил свою проблему, как я сказал в комментарии, добавив команду rpad:regexp_like (верхний (rpad (MyField, 80, '#')), '^ [W] [^ A]');Если у кого-то есть идея получше, мне интересно.думает

0 голосов
/ 30 ноября 2018

Вы можете отрицать regexp_like, чтобы оно соответствовало шаблонам, которые вам не нужны:

with mytable(id, myfield) as (
  select 1, 'WA' from dual union all
  select 2, 'W' from dual union all
  select 3, 'W51534' from dual union all
  select 4, 'Z' from dual union all
  select 5, '' from dual
)
select id, myfield
from mytable
where not regexp_like(upper(myfield), '^WA') or 
myfield is null
order by id; 
0 голосов
/ 30 ноября 2018

Вам может даже не понадобиться использовать REGEXP_LIKE здесь, обычного LIKE может быть достаточно:

SELECT MyField
FROM MyTable
WHERE MyField NOT LIKE 'WA%';

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...