Oracle PL / SQL REGEXP_LIKE / REGEXP_INSTR - PullRequest
       14

Oracle PL / SQL REGEXP_LIKE / REGEXP_INSTR

1 голос
/ 14 сентября 2009

Мне требуется средство проверки, чтобы увидеть, имеет ли строка следующий точный образец внутри нее, т.е.

(P)

Примеры, где это может быть правдой:

'Испытательная система (P)'

Не уверен, однако, как проверить случаи, когда строка, которая не имеет '(P)', т.е.:

'Тестовая система (GUI для Prof)' - в этом случае это будет неверно, но я использую REGEXP_LIKE, и она фактически возвращает TRUE.

Я хочу, чтобы он возвращал True только в том случае, если в строке поиска существует точная строка '(P)'.

Любая помощь в достижении этого с использованием PL / SQL была бы полезной.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 14 сентября 2009

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

REGEX_LIKE(t.column, '\(P\)')

Regular-Expressions.info - отличный ресурс.

Обычный INSTR будет работать (Oracle 8i +):

WHERE INSTR(t.column, '(P)') > 0 --column contains '(P)'

WHERE INSTR(t.column, '(P)') = 0 --column does NOT contain '(P)'

LIKE тоже работает:

WHERE t.column LIKE '%(P)%' --column contains '(P)'

WHERE t.column NOT LIKE '%(P)%' --column does NOT contain '(P)'
2 голосов
/ 14 сентября 2009

Попробуйте like:

WHERE thing like '%(P)%';
0 голосов
/ 12 февраля 2013

Я бы придерживался REGEXP_* функций, так как вам все равно нужно будет их практиковать, и знание регулярных выражений вам пригодится.

Они все хорошие ответы, за исключением опечатки в первом ответе Пони. :

Опечатка в том, что в REGEX_LIKE отсутствует P :

Написано: REGEX_LIKE(t.column, '\(P\)')

Правильно: REGEXP_LIKE(T.COLUMN, '\(P\)')

'\' - это escape-символ, который говорит: «Не ищите символическое значение следующего символа, а ищите сам буквальный символ».

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