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_charje znakový výraz, který slouží jako hledaná hodnota.patternje regulární výraz.positionje 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_paramumožň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.