Oracle
 sql >> Database >  >> RDS >> Oracle

REGEXP_COUNT() Funzione in Oracle

In Oracle, il REGEXP_COUNT() La funzione restituisce il numero di volte in cui un modello si verifica in una stringa di origine.

Sintassi

La sintassi è questa:

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

Dove:

  • source_char è un'espressione di carattere che funge da valore di ricerca.
  • pattern è l'espressione regolare.
  • position è un numero intero positivo che specifica da dove iniziare la ricerca. L'impostazione predefinita è 1 , ovvero avvia la ricerca dal primo carattere.
  • match_param consente di modificare il comportamento di corrispondenza predefinito della funzione. Ad esempio, consente di specificare la distinzione tra maiuscole e minuscole, come vengono gestite più righe e spazi, ecc.

Esempio

Ecco un esempio di base dell'utilizzo di REGEXP_COUNT() in Oracle:

SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Risultato:

1

In questo caso c'è una corrispondenza.

Le espressioni regolari possono essere molto potenti e questo esempio usa un esempio molto semplice. Per utilizzare REGEXP_COUNT() in modo efficace, dovrai conoscere lo schema corretto da utilizzare per il risultato desiderato. Gli esempi in questa pagina si concentrano su REGEXP_COUNT() funzione stessa, non su espressioni regolari.

Nessuna corrispondenza

Ecco un esempio in cui non c'è corrispondenza:

SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;

Risultato:

0

Non c'è corrispondenza, quindi 0 viene restituito.

Partite multiple

Ecco un esempio con più corrispondenze:

SELECT 
    REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Risultato:

2

In questo caso, ci sono due corrispondenze.

Posizione iniziale

Puoi specificare una posizione di partenza:

SELECT 
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;

Risultato:

1

Quindi qui otteniamo solo una corrispondenza. Questo perché la ricerca inizia solo dopo la prima occorrenza (posizione 8).

Maiuscole/minuscole

Il REGEXP_COUNT() segue le regole di determinazione delle regole di confronto di Oracle, che definiscono le regole di confronto da utilizzare quando si confronta la stringa con il modello.

Tuttavia, puoi specificare esplicitamente la distinzione tra maiuscole e minuscole con il quarto argomento facoltativo. Quando lo fai, sovrascrive qualsiasi distinzione tra maiuscole e minuscole o sensibilità all'accento delle regole di confronto determinate.

Puoi specificare i per la corrispondenza senza distinzione tra maiuscole e minuscole e c per la corrispondenza con distinzione tra maiuscole e minuscole.

Ecco un esempio:

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;

Risultato:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Qui, la mia raccolta fa distinzione tra maiuscole e minuscole. Le altre due stringhe sono state forzate rispettivamente a una corrispondenza senza distinzione tra maiuscole e minuscole.

Argomenti nulli

Con l'eccezione del quarto argomento, fornendo null per un argomento risulta 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;

Risultato:

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

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Numero di argomenti errato

Se non si passano argomenti alla funzione, o ne sono troppo pochi, si verifica un errore:

SELECT REGEXP_COUNT()
FROM DUAL;

Risultato:

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:

Lo stesso vale quando passiamo troppi argomenti:

SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Risultato:

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:

Maggiori informazioni

Il REGEXP_COUNT() funzione (così come l'altra implementazione di espressioni regolari di Oracle) è conforme allo standard delle espressioni regolari POSIX (Portable Operating System Interface) IEEE e alle Linee guida per le espressioni regolari Unicode di Unicode Consortium.

Consulta la documentazione Oracle per ulteriori informazioni ed esempi di REGEXP_COUNT() funzione.