Использование 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]');
Если у кого-то есть идея получше, мне интересно.
думает