V Oracle, REGEXP_COUNT()
funkce vrací počet výskytů vzoru ve zdrojovém řetězci.
Syntaxe
Syntaxe vypadá takto:
REGEXP_COUNT (source_char, pattern [, position [, match_param]])
Kde:
source_char
je znakový výraz, který slouží jako hledaná hodnota.pattern
je regulární výraz.position
je kladné celé číslo, které určuje, kde začít hledání. Výchozí hodnota je1
, což znamená, že začněte hledat od prvního znaku.match_param
umožňuje změnit výchozí chování funkce při přiřazování. Umožňuje vám například určit rozlišování malých a velkých písmen, způsob zpracování více řádků a mezer atd.
Příklad
Zde je základní příklad použití REGEXP_COUNT()
v Oracle:
SELECT
REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;
Výsledek:
1
V tomto případě existuje jedna shoda.
Regulární výrazy mohou být velmi výkonné a tento příklad používá velmi jednoduchý příklad. Chcete-li použít REGEXP_COUNT()
efektivně, budete potřebovat znát správný vzor, který použijete pro požadovaný výsledek. Příklady na této stránce se zaměřují na REGEXP_COUNT()
samotná funkce, nikoli na regulární výrazy.
Žádná shoda
Zde je příklad, kdy neexistuje žádná shoda:
SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;
Výsledek:
0
Žádná shoda, takže 0
je vráceno.
Více shod
Zde je příklad s více shodami:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;
Výsledek:
2
V tomto případě se jedná o dvě shody.
Počáteční pozice
Můžete určit počáteční pozici:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;
Výsledek:
1
Takže tady máme jen jeden zápas. Je to proto, že vyhledávání nezačne dříve než po prvním výskytu (pozice 8).
Rozlišovat malá a velká písmena
REGEXP_COUNT()
funkce se řídí pravidly určování řazení Oracle, která definují řazení, které se má použít při porovnávání řetězce se vzorem.
Pomocí volitelného čtvrtého argumentu však můžete explicitně určit rozlišování malých a velkých písmen. Když to uděláte, přepíše to rozlišování velkých a malých písmen nebo zvýraznění v určeném řazení.
Můžete zadat i
pro párování bez rozlišení velkých a malých písmen a c
pro rozpoznávání velkých a malých písmen.
Zde je příklad:
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;
Výsledek:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ 0 1 0
Zde moje řazení rozlišuje malá a velká písmena. Zbylé dva řetězce byly nuceny k přiřazování rozlišovat malá a velká písmena, respektive malá a velká písmena.
Nulové argumenty
S výjimkou čtvrtého argumentu poskytujícího null
pro argument je výsledkem 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;
Výsledek:
1 2 3 4 _______ _______ _______ ____ null null null 0
Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null
dochází v důsledku SQL SELECT
prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null
by měl být vrácen.
Špatný počet argumentů
Pokud funkci předáte žádné nebo příliš málo argumentů, dojde k chybě:
SELECT REGEXP_COUNT()
FROM DUAL;
Výsledek:
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:
Totéž platí, když předáme příliš mnoho argumentů:
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;
Výsledek:
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:
Další informace
REGEXP_COUNT()
funkce (stejně jako další implementace regulárních výrazů společnosti Oracle) odpovídá standardu IEEE Portable Operating System Interface (POSIX) pro regulární výrazy a směrnicím Unicode Regular Expression Guidelines Unicode Consortium.
Další informace a příklady REGEXP_COUNT()
naleznete v dokumentaci k Oracle funkce.