Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função REGEXP_COUNT() no Oracle


No Oracle, o REGEXP_COUNT() A função retorna o número de vezes que um padrão ocorre em uma string de origem.

Sintaxe


A sintaxe fica assim:
REGEXP_COUNT (source_char, pattern [, position [, match_param]])

Onde:
  • source_char é uma expressão de caractere que serve como valor de pesquisa.
  • pattern é a expressão regular.
  • position é um número inteiro positivo que especifica onde iniciar a pesquisa. O padrão é 1 , ou seja, inicie a pesquisa no primeiro caractere.
  • match_param permite alterar o comportamento de correspondência padrão da função. Por exemplo, ele permite especificar a diferenciação entre maiúsculas e minúsculas, como várias linhas e espaços são tratados etc.

Exemplo


Aqui está um exemplo básico de uso de REGEXP_COUNT() no Oráculo:
SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Resultado:
1

Neste caso, há uma correspondência.

Expressões regulares podem ser muito poderosas, e este exemplo usa um exemplo muito simples. Para usar REGEXP_COUNT() efetivamente, você precisará saber o padrão correto a ser usado para o resultado desejado. Os exemplos nesta página focam no REGEXP_COUNT() função em si, não em expressões regulares.

Sem correspondência


Aqui está um exemplo em que não há correspondência:
SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;

Resultado:
0

Não há correspondência, então 0 é devolvido.

Várias correspondências


Aqui está um exemplo com várias correspondências:
SELECT 
    REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Resultado:
2

Neste caso, há duas partidas.

Posição inicial


Você pode especificar uma posição inicial:
SELECT 
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;

Resultado:
1

Então aqui só temos uma partida. Isso porque a busca não começa até depois da primeira ocorrência (posição 8).

Sensibilidade de maiúsculas e minúsculas


O REGEXP_COUNT() A função segue as regras de determinação de agrupamento do Oracle, que definem o agrupamento a ser usado ao combinar a string com o padrão.

No entanto, você pode especificar explicitamente a distinção entre maiúsculas e minúsculas com o quarto argumento opcional. Ao fazer isso, ele substitui qualquer distinção entre maiúsculas e minúsculas ou acentos do agrupamento determinado.

Você pode especificar i para correspondência que não diferencia maiúsculas de minúsculas e c para correspondência com distinção entre maiúsculas e minúsculas.

Aqui está um exemplo:
SELECT 
    REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;

Resultado:
   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Aqui, meu agrupamento diferencia maiúsculas de minúsculas. As outras duas strings foram forçadas a uma correspondência que não diferencia maiúsculas de minúsculas e diferencia maiúsculas de minúsculas, respectivamente.

Argumentos nulos


Com exceção do quarto argumento, fornecendo null para um argumento resulta em null :
SET NULL 'null';
SELECT 
    REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
    REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
    REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
    REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;

Resultado:
      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que null ocorre como resultado de um SQL SELECT demonstração.

No entanto, você pode usar SET NULL para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null deve ser devolvido.

Número errado de argumentos


Não passar argumentos para a função, ou muito poucos, resulta em um erro:
SELECT REGEXP_COUNT()
FROM DUAL;

Resultado:
Error starting at line : 1 in command -
SELECT REGEXP_COUNT()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

O mesmo se aplica quando passamos muitos argumentos:
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Resultado:
Error starting at line : 1 in command -
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

Mais informações


O REGEXP_COUNT() A função (assim como a outra implementação de expressões regulares da Oracle) está em conformidade com o padrão de expressão regular IEEE Portable Operating System Interface (POSIX) e com as Diretrizes de Expressão Regular Unicode do Unicode Consortium.

Consulte a documentação do Oracle para obter mais informações e exemplos do REGEXP_COUNT() função.