Oracle pl / sql regexp_like / regexp_instr
Pergunta
Eu preciso de um meio de verificar se uma string tem o seguinte padrão exato dentro dela, ou seja:
(P)
Exemplos onde isso seria verdade é:
'Sistema de teste (P)'
Não sabe como verificar os casos quando a string que não tem '(p)', ou seja:
'Sistema de teste (GUI for Prof)' - Nesse caso, isso seria falso, mas eu estou usando regexp_like e realmente retorna true.
Eu só quero que ele retorne true quando a string exata de '(p)' existe na sequência de pesquisa.
Qualquer ajuda para conseguir isso usando PL/SQL seria ótima.
Obrigado.
Solução
Usar:
REGEX_LIKE(t.column, '\(P\)')
Expressões regulares.info é um ótimo recurso.
Regular Instr funcionaria (Oracle 8i+):
WHERE INSTR(t.column, '(P)') > 0 --column contains '(P)'
WHERE INSTR(t.column, '(P)') = 0 --column does NOT contain '(P)'
Como obras também:
WHERE t.column LIKE '%(P)%' --column contains '(P)'
WHERE t.column NOT LIKE '%(P)%' --column does NOT contain '(P)'
Outras dicas
Tentar like
:
WHERE thing like '%(P)%';
Eu ficaria com REGEXP_*
Funções, como você precisará praticá -las de qualquer maneira, e conhecer expressões regulares o servirá bem.
São todas as boas respostas, exceto por um erro de digitação na primeira resposta dos pôneis. :
O erro de digitação é que há um P Falta de regex_like:
Escrito: REGEX_LIKE(t.column, '\(P\)')
Correto: REGEXP_LIKE(T.COLUMN, '\(P\)')
O '' é um personagem de fuga que diz "Não procure o significado simbólico do próximo personagem, mas procure o próprio caráter literal".