Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction REGEXP_COUNT() dans Oracle

Dans Oracle, le REGEXP_COUNT() La fonction renvoie le nombre de fois qu'un motif apparaît dans une chaîne source.

Syntaxe

La syntaxe ressemble à ceci :

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

Où :

  • source_char est une expression de caractère qui sert de valeur de recherche.
  • pattern est l'expression régulière.
  • position est un entier positif qui spécifie où commencer la recherche. La valeur par défaut est 1 , c'est-à-dire lancer la recherche au premier caractère.
  • match_param vous permet de modifier le comportement de correspondance par défaut de la fonction. Par exemple, il vous permet de spécifier la sensibilité à la casse, la manière dont plusieurs lignes et espaces sont traités, etc.

Exemple

Voici un exemple basique d'utilisation de REGEXP_COUNT() dans Oracle :

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

Résultat :

1

Dans ce cas, il y a une correspondance.

Les expressions régulières peuvent être très puissantes, et cet exemple utilise un exemple très simple. Pour utiliser REGEXP_COUNT() efficacement, vous aurez besoin de connaître le modèle correct à utiliser pour le résultat souhaité. Les exemples sur cette page se concentrent sur le REGEXP_COUNT() fonction elle-même, pas sur des expressions régulières.

Aucune correspondance

Voici un exemple où il n'y a pas de correspondance :

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

Résultat :

0

Il n'y a pas de correspondance, donc 0 est renvoyé.

Plusieurs correspondances

Voici un exemple avec plusieurs correspondances :

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

Résultat :

2

Dans ce cas, il y a deux correspondances.

Position de départ

Vous pouvez spécifier une position de départ :

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

Résultat :

1

Donc, ici, nous n'obtenons qu'un seul match. En effet, la recherche ne démarre qu'après la première occurrence (position 8).

Sensibilité à la casse

Le REGEXP_COUNT() suit les règles de détermination de classement d'Oracle, qui définissent le classement à utiliser lors de la correspondance de la chaîne avec le modèle.

Cependant, vous pouvez spécifier explicitement la sensibilité à la casse avec le quatrième argument facultatif. Lorsque vous faites cela, il remplace toute sensibilité à la casse ou à l'accent du classement déterminé.

Vous pouvez spécifier i pour la correspondance insensible à la casse et c pour la correspondance sensible à la casse.

Voici un exemple :

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;

Résultat :

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Ici, ma collation est sensible à la casse. Les deux autres chaînes ont été forcées à une correspondance insensible à la casse et sensible à la casse respectivement.

Arguments nuls

À l'exception du quatrième argument, fournir null pour un argument donne 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;

Résultat :

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

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Mauvais nombre d'arguments

Ne passer aucun argument à la fonction, ou trop peu, génère une erreur :

SELECT REGEXP_COUNT()
FROM DUAL;

Résultat :

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:

Il en va de même lorsque nous passons trop d'arguments :

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

Résultat :

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:

Plus d'informations

Le REGEXP_COUNT() La fonction (ainsi que les autres implémentations d'expressions régulières d'Oracle) est conforme à la norme d'expression régulière IEEE Portable Operating System Interface (POSIX) et aux directives d'expression régulière Unicode du consortium Unicode.

Voir la documentation Oracle pour plus d'informations et des exemples de REGEXP_COUNT() fonction.