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 er1
, 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.