sql >> Database >  >> RDS >> Oracle

REGEXP_COUNT() Functie in Oracle

In Oracle, de REGEXP_COUNT() functie retourneert het aantal keren dat een patroon voorkomt in een brontekenreeks.

Syntaxis

De syntaxis gaat als volgt:

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

Waar:

  • source_char is een tekenuitdrukking die als zoekwaarde dient.
  • pattern is de reguliere expressie.
  • position is een positief geheel getal dat aangeeft waar de zoekopdracht moet beginnen. De standaard is 1 , wat betekent:begin met zoeken bij het eerste teken.
  • match_param laat je het standaard matchgedrag van de functie wijzigen. U kunt bijvoorbeeld hoofdlettergevoeligheid specificeren, hoe meerdere regels en spaties worden behandeld, enz.

Voorbeeld

Hier is een eenvoudig voorbeeld van het gebruik van REGEXP_COUNT() in Orakel:

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

Resultaat:

1

In dit geval is er één match.

Reguliere expressies kunnen erg krachtig zijn, en in dit voorbeeld wordt een heel eenvoudig voorbeeld gebruikt. Om REGEXP_COUNT() . te gebruiken effectief is, moet u het juiste patroon kennen om te gebruiken voor het gewenste resultaat. De voorbeelden op deze pagina richten zich op de REGEXP_COUNT() functie zelf, niet op reguliere expressies.

Geen overeenkomst

Hier is een voorbeeld waarbij er geen overeenkomst is:

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

Resultaat:

0

Er is geen overeenkomst, dus 0 wordt geretourneerd.

Meerdere wedstrijden

Hier is een voorbeeld met meerdere overeenkomsten:

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

Resultaat:

2

In dit geval zijn er twee overeenkomsten.

Startpositie

U kunt een startpositie specificeren:

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

Resultaat:

1

Dus hier krijgen we maar één match. Dat komt omdat het zoeken pas begint na de eerste keer dat het voorkomt (positie 8).

Hoofdlettergevoeligheid

De REGEXP_COUNT() functie volgt de sorteerbepalingsregels van Oracle, die de sortering definiëren die moet worden gebruikt bij het matchen van de tekenreeks met het patroon.

U kunt echter expliciet hoofdlettergevoeligheid specificeren met het optionele vierde argument. Wanneer u dit doet, heft het elke hoofdlettergevoeligheid of accentgevoeligheid van de bepaalde sortering op.

U kunt i . specificeren voor hoofdletterongevoelige overeenkomsten en c voor hoofdlettergevoelige overeenkomsten.

Hier is een voorbeeld:

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;

Resultaat:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Hier is mijn sortering hoofdlettergevoelig. De andere twee strings werden gedwongen om respectievelijk hoofdletterongevoelig en hoofdlettergevoelig te matchen.

Nullargumenten

Met uitzondering van het vierde argument, het verstrekken van null voor een argument resulteert in 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;

Resultaat:

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

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Onjuist aantal argumenten

Geen of te weinig argumenten aan de functie doorgeven, resulteert in een fout:

SELECT REGEXP_COUNT()
FROM DUAL;

Resultaat:

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:

Hetzelfde geldt wanneer we te veel argumenten doorgeven:

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

Resultaat:

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:

Meer informatie

De REGEXP_COUNT() functie (evenals Oracle's andere implementatie van reguliere expressies) voldoet aan de IEEE Portable Operating System Interface (POSIX) reguliere expressiestandaard en aan de Unicode Regular Expression Guidelines van het Unicode Consortium.

Zie de Oracle-documentatie voor meer informatie en voorbeelden van de REGEXP_COUNT() functie.


  1. Voeg twee partities samen tot één in SQL Server (T-SQL)

  2. Prestatiebewaking en -audit PostgreSQL - Topbronnen

  3. Maak een nieuwe tabel in de bestaande DB in een aparte SQLiteOpenHelper-klasse

  4. 10 tijdbesparende tips voor MS Access-gebruikers