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

REGEXP_COUNT() Funktion i Oracle

I Oracle er REGEXP_COUNT() funktion returnerer antallet af gange, et mønster forekommer i en kildestreng.

Syntaks

Syntaksen ser sådan ud:

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

Hvor:

  • source_char er et tegnudtryk, der tjener som søgeværdi.
  • pattern er det regulære udtryk.
  • position er et positivt heltal, der angiver, hvor søgningen skal begynde. Standarden er 1 , hvilket betyder, start søgningen ved det første tegn.
  • match_param lader dig ændre funktionens standardmatch-adfærd. For eksempel giver det dig mulighed for at specificere store og små bogstaver, hvordan flere linjer og mellemrum håndteres osv.

Eksempel

Her er et grundlæggende eksempel på brug af REGEXP_COUNT() i Oracle:

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

Resultat:

1

I dette tilfælde er der ét match.

Regulære udtryk kan være meget kraftfulde, og dette eksempel bruger et meget simpelt eksempel. For at bruge REGEXP_COUNT() effektivt, skal du kende det korrekte mønster til at bruge til det ønskede resultat. Eksemplerne på denne side fokuserer på REGEXP_COUNT() funktion selv, ikke på regulære udtryk.

Ingen match

Her er et eksempel, hvor der ikke er nogen match:

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

Resultat:

0

Der er ingen match, så 0 er returneret.

Flere match

Her er et eksempel med flere matches:

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

Resultat:

2

I dette tilfælde er der to matcher.

Startposition

Du kan angive en startposition:

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

Resultat:

1

Så her får vi kun én kamp. Det skyldes, at søgningen først starter efter den første forekomst (position 8).

Skrivar og bogstaver

REGEXP_COUNT() funktionen følger Oracles regler for sorteringsbestemmelse, som definerer den sortering, der skal bruges, når strengen matches med mønsteret.

Du kan dog udtrykkeligt angive følsomhed mellem store og små bogstaver med det valgfrie fjerde argument. Når du gør dette, tilsidesætter det enhver følsomhed mellem store og små bogstaver eller accentfølsomhed for den bestemte sortering.

Du kan angive i til forskellen mellem store og små bogstaver og c for store og små bogstaver.

Her er et eksempel:

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;

Resultat:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Her er min sammenstilling skelet mellem store og små bogstaver. De to andre strenge blev tvunget til en matchning, der skelner mellem store og små bogstaver, og en matchning, der skelner mellem store og små bogstaver.

Nul-argumenter

Med undtagelse af det fjerde argument, der giver null for et argument resulterer i 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;

Resultat:

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

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Hvis der ikke sendes nogen argumenter til funktionen, eller for få, resulterer det i en fejl:

SELECT REGEXP_COUNT()
FROM DUAL;

Resultat:

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:

Det samme gælder, når vi sender for mange argumenter:

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

Resultat:

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:

Flere oplysninger

REGEXP_COUNT() funktion (såvel som Oracles øvrige implementering af regulære udtryk) er i overensstemmelse med IEEE Portable Operating System Interface (POSIX) regulære udtryksstandard og Unicode Regular Expression Guidelines fra Unicode Consortium.

Se Oracle-dokumentationen for mere information og eksempler på REGEXP_COUNT() funktion.


  1. Kør en forespørgsel med en LIMIT/OFFSET og få også det samlede antal rækker

  2. pdo udarbejdede udsagn med jokertegn

  3. Hvordan tvinger jeg Postgres til at bruge et bestemt indeks?

  4. Ret problem med SQL-databasegendannelse afventer adgang nægtet