Как избежать] (скобка справа) в запросе Oracle SQL regexp_like? - PullRequest
0 голосов
/ 06 января 2020

Чтобы выбрать строки, которые используют один из нескольких специальных символов, я хотел бы использовать условие regexp_like в моем Oracle SQL запросе:

    select 1 from dual where
    regexp_like(
      'Example [0,5%] item with special characters', 
      '[\°\]\[]+'
    );

Но это не работает для скобки правый символ (']').

Я уже пытался:

  • , чтобы выйти из скобки, используя обратную косую черту sh \]
  • unistr('\005D') вместо непосредственного использования символа

, но без успеха. Кажется, что он работает для любого другого символа, но не с правильной скобкой.

Есть ли способ исправить этот запрос или у кого-то есть объяснение, почему экранирование этого символа не работает?

Ответы [ 3 ]

1 голос
/ 06 января 2020

Я думаю, что вам не нужен синтаксис списка соответствия ([]). Вы можете просто перечислить символы поиска, разделенные пробелом (|). Квадратные скобки требуют экранирования sh.

select 1 
from dual where
    regexp_like(
      'Example [0,5%] item with special characters', 
      '\[|\]|°'
    );

Демонстрация на DB Fiddlde

with t as (
    select 'Example [0,5%] item with special characters' v from dual
    union all select 'abc'  from dual
    union all select 'abc°' from dual
    union all select 'a[bc' from dual
    union all select 'abc]' from dual
)
select
    v,
    case when regexp_like(v, '\[|\]|°') then 'match' else 'no match' end match
from t
V                                           | MATCH   
:------------------------------------------ | :-------
Example [0,5%] item with special characters | match   
abc                                         | no match
abc°                                        | match   
a[bc                                        | match   
abc]                                        | match   
1 голос
/ 06 января 2020

Из документации Oracle :

Чтобы указать правую скобку (]) в выражении в скобках, поместите ее первым в списке

Таким образом, ваш запрос должен выглядеть следующим образом (обратите внимание, что ни один из символов не должен быть экранирован в классе символов):

select 1 from dual where
regexp_like(
  'Example [0,5%] item with special characters', 
  '[][°]'
)

Вывод

1

Демонстрация по SQLFiddle

0 голосов
/ 06 января 2020

Сосредоточив внимание на вашем вопросе, '\[' работает:

select 1
from dual
where regexp_like('Example [0,5%] item with special characters', '\[');

Здесь - это дб <> скрипка.

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