sql >> Databáze >  >> RDS >> Oracle

Funkce REGEXP_COUNT() v Oracle

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 je 1 , 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.


  1. Při dotazu došlo ke ztrátě připojení k serveru MySQL

  2. Jak změnit barvu a písma v SQL Server Management Studio (SSMS) - SQL Server / TSQL výukový program, část 12

  3. SELECT DISTINCT na jednom sloupci

  4. Rozdíl mezi omezeními Inline a Out-of-Line