Categorias:

Funções de cadeia de caracteres (expressões regulares)

REGEXP_COUNT

Retorna o número de vezes que um padrão ocorre em uma cadeia de caracteres.

Consulte também Funções de cadeia de caracteres (expressões regulares).

Sintaxe

REGEXP_COUNT( <subject> , <pattern> [ , <position> , <parameters> ] )
Copy

Argumentos

Obrigatório:

subject

A cadeia de caracteres a ser procurada por correspondências.

pattern

Padrão a atender.

Para diretrizes sobre como especificar padrões, consulte Funções de cadeia de caracteres (expressões regulares).

Opcional:

position

Número de caracteres desde o início da cadeia de caracteres onde a função começa a procurar correspondências.

Padrão: 1 (a busca por uma correspondência começa no primeiro caractere à esquerda)

parameters

Cadeia de caracteres de um ou mais caracteres que especifica os parâmetros usados para a busca de correspondências. Valores com suporte:

Parâmetro

Descrição

c

Correspondência com distinção entre maiúsculas e minúsculas

i

Correspondência sem distinção entre maiúsculas e minúsculas

m

Modo multilinha

e

Extração de subcorrespondências

s

O caractere curinga POSIX . corresponde a \n

Padrão: c

Para obter mais detalhes, consulte Especificação dos parâmetros para a expressão regular.

Retornos

Retorna um valor do tipo NUMBER. Retorna NULL se algum argumento for NULL.

Notas de uso

Consulte Notas de uso geral para funções de expressão regular.

Detalhes do agrupamento

Arguments with collation specifications are currently not supported.

Exemplos

O seguinte exemplo conta as ocorrências da palavra was. A correspondência começa no primeiro caractere da cadeia de caracteres:

SELECT REGEXP_COUNT('It was the best of times, it was the worst of times',
                    '\\bwas\\b',
                    1) AS result;
Copy
+--------+
| RESULT |
|--------|
|      2 |
+--------+

O exemplo seguinte ilustra ocorrências que se sobrepõem: Criar uma tabela e inserir dados:

CREATE OR REPLACE TABLE overlap (id NUMBER, a STRING);
INSERT INTO overlap VALUES (1,',abc,def,ghi,jkl,');
INSERT INTO overlap VALUES (2,',abc,,def,,ghi,,jkl,');

SELECT * FROM overlap;
Copy
+----+----------------------+
| ID | A                    |
|----+----------------------|
|  1 | ,abc,def,ghi,jkl,    |
|  2 | ,abc,,def,,ghi,,jkl, |
+----+----------------------+

Execute uma consulta que use REGEXP_COUNT para contar o número de vezes que o seguinte padrão é encontrado em cada linha: um sinal de pontuação seguido por dígitos e letras, seguido por um sinal de pontuação.

SELECT id,
       REGEXP_COUNT(a,
                    '[[:punct:]][[:alnum:]]+[[:punct:]]',
                    1,
                    'i') AS result
  FROM overlap;
Copy
+----+--------+
| ID | RESULT |
|----+--------|
|  1 |      2 |
|  2 |      4 |
+----+--------+