sql >> Databasteknik >  >> RDS >> Oracle

REGEXP_COUNT() Funktion i Oracle

I Oracle, REGEXP_COUNT() funktion returnerar antalet gånger ett mönster förekommer i en källsträng.

Syntax

Syntaxen ser ut så här:

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

Var:

  • source_char är ett teckenuttryck som fungerar som sökvärde.
  • pattern är det reguljära uttrycket.
  • position är ett positivt heltal som anger var sökningen ska börja. Standard är 1 , vilket betyder, starta sökningen vid det första tecknet.
  • match_param låter dig ändra standardmatchningsbeteendet för funktionen. Till exempel låter den dig ange skiftlägeskänslighet, hur flera rader och mellanslag hanteras, etc.

Exempel

Här är ett grundläggande exempel på hur du använder REGEXP_COUNT() i Oracle:

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

Resultat:

1

I det här fallet finns det en matchning.

Reguljära uttryck kan vara mycket kraftfulla, och det här exemplet använder ett mycket enkelt exempel. För att använda REGEXP_COUNT() i praktiken måste du känna till det korrekta mönstret att använda för det önskade resultatet. Exemplen på den här sidan fokuserar på REGEXP_COUNT() funktionen i sig, inte på reguljära uttryck.

Ingen match

Här är ett exempel där det inte finns någon matchning:

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

Resultat:

0

Det finns ingen matchning, så 0 returneras.

Flera matchningar

Här är ett exempel med flera matchningar:

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

Resultat:

2

I det här fallet finns det två matchningar.

Startposition

Du kan ange en startposition:

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

Resultat:

1

Så här får vi bara en match. Det beror på att sökningen inte startar förrän efter den första händelsen (position 8).

Skaftkänslighet

REGEXP_COUNT() funktionen följer Oracles regler för bestämning av sortering, som definierar sorteringen som ska användas när strängen matchas med mönstret.

Du kan dock uttryckligen ange skiftlägeskänslighet med det valfria fjärde argumentet. När du gör detta åsidosätter det all skiftlägeskänslighet eller accentkänslighet för den fastställda sorteringen.

Du kan ange i för skiftlägesokänslig matchning och c för skiftlägeskänslig matchning.

Här är ett exempel:

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

Här är min sammanställning skiftlägeskänslig. De andra två strängarna tvingades till en skiftlägesokänslig respektive skiftlägeskänslig matchning.

Nollargument

Med undantag för det fjärde argumentet, som ger null för ett argument resulterar 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 returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Fel antal argument

Att skicka inga argument till funktionen, eller för få, resulterar i ett fel:

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:

Detsamma gäller när vi skickar för många argument:

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:

Mer information

REGEXP_COUNT() funktion (liksom Oracles andra implementering av reguljära uttryck) överensstämmer med IEEE Portable Operating System Interface (POSIX) reguljära uttrycksstandard och Unicode Regular Expression Guidelines från Unicode Consortium.

Se Oracle-dokumentationen för mer information och exempel på REGEXP_COUNT() funktion.


  1. SQLskills Wait Types Library visar nu SentryOne-data

  2. Hur replikerar man endast INSERTs inte DELETEs/UPDATEs på Slony Slave Node?

  3. oracle sql:uppdatera om det finns annat infoga

  4. Ett JNI-fel har uppstått, kontrollera din installation och försök igen i Eclipse x86 Windows 8.1