Использование REGEXP_LIKE в Oracle

В таблице 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 ответа

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

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

демонстрация

Вы можете отменить 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; 

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

Другие вопросы по тегам