Oracle
 sql >> Datenbank >  >> RDS >> Oracle

REGEXP_COUNT()-Funktion in Oracle

In Oracle der REGEXP_COUNT() Die Funktion gibt zurück, wie oft ein Muster in einer Quellzeichenfolge vorkommt.

Syntax

Die Syntax lautet wie folgt:

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

Wo:

  • source_char ist ein Zeichenausdruck, der als Suchwert dient.
  • pattern ist der reguläre Ausdruck.
  • position ist eine positive Ganzzahl, die angibt, wo die Suche beginnen soll. Der Standardwert ist 1 , was bedeutet, beginnen Sie die Suche beim ersten Zeichen.
  • match_param können Sie das standardmäßige Übereinstimmungsverhalten der Funktion ändern. Beispielsweise können Sie Groß- und Kleinschreibung beachten, wie mit mehreren Zeilen und Leerzeichen umgegangen wird usw.

Beispiel

Hier ist ein einfaches Beispiel für die Verwendung von REGEXP_COUNT() bei Oracle:

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

Ergebnis:

1

In diesem Fall gibt es eine Übereinstimmung.

Reguläre Ausdrücke können sehr leistungsfähig sein, und dieses Beispiel verwendet ein sehr einfaches Beispiel. Um REGEXP_COUNT() zu verwenden Um effektiv zu sein, müssen Sie das richtige Muster kennen, um das gewünschte Ergebnis zu erzielen. Die Beispiele auf dieser Seite konzentrieren sich auf REGEXP_COUNT() Funktion selbst, nicht auf reguläre Ausdrücke.

Keine Übereinstimmung

Hier ist ein Beispiel, bei dem es keine Übereinstimmung gibt:

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

Ergebnis:

0

Es gibt keine Übereinstimmung, also 0 zurückgegeben wird.

Mehrere Übereinstimmungen

Hier ist ein Beispiel mit mehreren Übereinstimmungen:

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

Ergebnis:

2

In diesem Fall gibt es zwei Übereinstimmungen.

Startposition

Sie können eine Startposition angeben:

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

Ergebnis:

1

Hier bekommen wir also nur ein Match. Das liegt daran, dass die Suche erst nach dem ersten Vorkommen (Position 8) beginnt.

Groß-/Kleinschreibung

Der REGEXP_COUNT() Die Funktion folgt den Sortierungsbestimmungsregeln von Oracle, die die zu verwendende Sortierung definieren, wenn die Zeichenfolge mit dem Muster abgeglichen wird.

Mit dem optionalen vierten Argument können Sie jedoch explizit die Groß-/Kleinschreibung angeben. Wenn Sie dies tun, überschreibt es alle Groß- und Kleinschreibung oder Akzente der bestimmten Kollatierung.

Sie können i angeben für Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung und c für Groß- und Kleinschreibung.

Hier ist ein Beispiel:

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;

Ergebnis:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Hier wird bei meiner Sortierung zwischen Groß- und Kleinschreibung unterschieden. Die anderen beiden Strings wurden zu einem case-insensitiven bzw. case-sensitiven Matching gezwungen.

Null-Argumente

Mit Ausnahme des vierten Arguments, das null bereitstellt für ein Argument ergibt 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;

Ergebnis:

      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Falsche Anzahl von Argumenten

Wenn der Funktion keine oder zu wenige Argumente übergeben werden, führt dies zu einem Fehler:

SELECT REGEXP_COUNT()
FROM DUAL;

Ergebnis:

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:

Dasselbe gilt, wenn wir zu viele Argumente übergeben:

SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Ergebnis:

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:

Weitere Informationen

Der REGEXP_COUNT() -Funktion (sowie die andere Implementierung regulärer Ausdrücke von Oracle) entspricht dem IEEE Portable Operating System Interface (POSIX)-Standard für reguläre Ausdrücke und den Unicode-Richtlinien für reguläre Ausdrücke des Unicode-Konsortiums.

Weitere Informationen und Beispiele für REGEXP_COUNT() finden Sie in der Oracle-Dokumentation Funktion.