REGEXP_COUNT-Funktion Oracle/PLSQL

In diesem Oracle-Lernprogramm wird erläutert, wie Sie die Oracle/PLSQL REGEXP_COUNT-Funktion mit Syntax und Beispielen verwenden.

Beschreibung

Die Oracle/PLSQL REGEXP_COUNT Funktion zählt die Häufigkeit, mit der ein Muster in einer Zeichenfolge auftritt. Mit dieser Funktion, die in Oracle 11g eingeführt wurde, können Sie die Häufigkeit zählen, mit der eine Teilzeichenfolge in einer Zeichenfolge mithilfe der Mustererkennung für reguläre Ausdrücke erfolgt.

Syntax

Die Syntax für die REGEXP_COUNT-Funktion in Oracle/PLSQL lautet:

REGEXP_COUNT( string, pattern [, start_position [, atch_parameter ] ] )

Parameter oder Argumente

string Die zu suchende Zeichenfolge. Zeichenfolge kann CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB oder NCLOB sein.

pattern Die Übereinstimmungsinformationen für reguläre Ausdrücke. Es kann eine Kombination aus Folgendem sein:

Wert Beschreibung
^ Entspricht dem Anfang einer Zeichenfolge. Wenn es mit einem match_parameter von ‚m‘ verwendet wird, stimmt es mit dem Anfang einer Zeile irgendwo innerhalb des Ausdrucks überein.
$ Entspricht dem Ende einer Zeichenfolge. Wenn es mit einem match_parameter von ‚m‘ verwendet wird, stimmt es mit dem Ende einer Zeile irgendwo innerhalb von Ausdruck überein.
* Entspricht null oder mehr Vorkommen.
+ Entspricht einem oder mehreren Vorkommen.
? Entspricht Null oder einem Vorkommen.
. Entspricht einem beliebigen Zeichen außer NULL.
| Wird wie ein „OR“ verwendet, um mehr als eine Alternative anzugeben.
[ ] Wird verwendet, um eine übereinstimmende Liste anzugeben, in der Sie versuchen, mit einem der Zeichen in der Liste übereinzustimmen.
[^ ] Wird verwendet, um eine nicht übereinstimmende Liste anzugeben, in der Sie versuchen, ein beliebiges Zeichen mit Ausnahme der Zeichen in der Liste zu finden.
( ) Wird zum Gruppieren von Ausdrücken als Unterausdruck verwendet.
{m} Entspricht m-mal.
{m,} Entspricht mindestens m-mal.
{m,n} Entspricht mindestens m-mal, aber nicht mehr als n-mal.
\n n ist eine Zahl zwischen 1 und 9. Entspricht dem n-ten Teilausdruck innerhalb von () vor der Begegnung mit \ n.
[..] Entspricht einem Sortierelement, das mehr als ein Zeichen enthalten kann.
[::] Entspricht Zeichenklassen.
[==] Entspricht Äquivalenzklassen.
\d Entspricht einem Ziffernzeichen.
\D Entspricht einem Nicht-Digit-Zeichen.
\w Entspricht einem Wortzeichen.
\W Entspricht einem Nicht-Wortzeichen.
\s Entspricht einem Leerzeichen.
\S entspricht einem Nicht-Leerzeichen-Zeichen.
\A Entspricht dem Anfang einer Zeichenfolge oder entspricht am Ende einer Zeichenfolge vor einem Zeilenvorschubzeichen.
\Z Entspricht am Ende einer Zeichenfolge.
*? Entspricht dem vorhergehenden Muster null oder mehr Vorkommen.
+? Stimmt das vorherige Muster mit einem oder mehreren Vorkommen überein.
?? Entspricht dem vorhergehenden Muster null oder einem Vorkommen.
{n}? Entspricht dem vorherigen Muster n-mal.
{n,}? Stimmt mindestens n mal mit dem vorhergehenden Muster überein.
{n,m}? Entspricht dem vorherigen Muster mindestens n-mal, aber nicht mehr als m-mal.

start_position Wahlweise. Es ist die Position in der Zeichenfolge, wo die Suche beginnt. Wenn sie weggelassen wird, wird standardmäßig 1 als erste Position in der Zeichenfolge verwendet.

match_parameter Wahlweise. Es ermöglicht Ihnen, das übereinstimmende Verhalten für die Bedingung REGEXP_LIKE zu ändern. Es kann eine Kombination aus Folgendem sein:

Wert Beschreibung

‚c‘ Führen Sie eine Unterscheidung zwischen Groß- und Kleinschreibung durch.

‚i‘ Führen Sie die Groß- / Kleinschreibung nicht aus.

’n‘ Ermöglicht die Übereinstimmung des Punkts (.) Mit dem Zeilenumbruchzeichen. Standardmäßig ist der Punkt ein Platzhalter.

‚m‘ Es wird angenommen, dass Ausdruck mehrere Zeilen hat, wobei ^ der Anfang einer Zeile und $ das Ende einer Zeile ist, unabhängig von der Position dieser Zeichen im Ausdruck. Standardmäßig wird der Ausdruck als einzelne Zeile angenommen.

‚x‘ Leerzeichen werden ignoriert. Standardmäßig werden Leerzeichen wie jedes andere Zeichen verglichen.

Notiz

  • Die Funktion REGEXP_COUNT gibt einen numerischen Wert zurück.
  • Wenn widersprüchliche Werte für den Parameter „match_parameter“ angegeben sind, verwendet die Funktion REGEXP_COUNT den letzten Wert.
  • Wenn Sie den Parameter match_behavior nicht angeben, verwendet die REGEXP_COUNT-Funktion den NLS_SORT-Parameter, um zu ermitteln, ob eine Suche nach Groß- und Kleinschreibung verwendet werden soll. Dabei wird davon ausgegangen, dass die Zeichenfolge eine einzelne Zeile ist Charakter).
  • Wenn die REGEXP_COUNT-Funktion kein Muster findet, wird 0 zurückgegeben.

Gilt für

Die REGEXP_COUNT-Funktion kann in folgenden Versionen von Oracle/PLSQL verwendet werden:

  • Oracle 12c, Oracle 11g

Beispiel – Übereinstimmung mit einem einzelnen Zeichen

Fangen wir mit dem einfachsten Fall an. Lassen Sie uns zählen, wie oft das Zeichen ‚a‘ in einer Zeichenfolge angezeigt wird.

Beispielsweise:

Dieses Beispiel gibt 1 zurück, weil es die Anzahl der Vorkommen von ‚a‘ in der Zeichenfolge zählt. Da wir keinen Parameter match_parameter angegeben haben, führt die Funktion REGEXP_COUNT eine Suche nach Groß- und Kleinschreibung durch, dh die Zeichen ‚A‘ werden nicht in die Zählung einbezogen.

Wenn wir sowohl ‚a‘ als auch ‚A‘ in unsere Ergebnisse aufnehmen und eine Suche ohne Berücksichtigung der Groß- / Kleinschreibung durchführen möchten, könnten wir unsere Abfrage wie folgt ändern:

Jetzt, da wir eine start_position von 1 und einen match_parameter von ‚i‘ angegeben haben, gibt die Abfrage 3 als Ergebnis zurück. Diesmal würden sowohl die ‚a‘- als auch die ‚A‘-Werte in der Zählung enthalten sein.

Wenn wir die Anzahl von ‚a‘ in einer Spalte zählen wollten, könnten wir so etwas versuchen:

Dies würde die Anzahl der ‚a‘ – oder ‚A‘ -Werte im Feld last_name aus der contacts Tabelle zählen.

Beispiel – An mehrere Zeichen anpassen

Sehen wir uns als Nächstes an, wie wir die Funktion REGEXP_COUNT verwenden würden, um ein Muster mit mehreren Zeichen zu finden.

Beispielsweise:

In diesem Beispiel wird die Häufigkeit zurückgegeben, mit der das Wort ‚gute‘ in der Zeichenfolge angezeigt wird. Es wird eine Suche durchgeführt, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, sodass 2 zurückgegeben wird.

Beispielsweise:

In diesem Beispiel wird die Häufigkeit zurückgegeben, mit der das Wort ‚gute‘ in der Zeichenfolge ab Position 5 angezeigt wird. In diesem Fall wird 1 zurückgegeben, da die ersten drei Zeichen in der Zeichenfolge vor der Suche nach dem Muster übersprungen werden.

Sehen wir uns jetzt an, wie wir die Funktion REGEXP_COUNT mit einer Tabellenspalte verwenden und nach mehreren Zeichen suchen würden.

Beispielsweise:

In diesem Beispiel zählen wir die Anzahl der Vorkommen von „the“ im Feld other_comments in der Tabelle contacts.

Beispiel – Wählen Sie mehr als eine Alternative

Im folgenden Beispiel wird das | pattern verwendet. Das | pattern wird als „OR“ verwendet, um mehrere Alternativen anzugeben.

Beispielsweise:

Dieses Beispiel gibt 3 zurück, weil es die Anzahl der Vokale (a, e, i, o oder u) in der Zeichenfolge ‚AeroSmith‘ zählt. Da wir keinen match_parameter-Wert angegeben haben, führt die REGEXP_COUNT-Funktion eine Suche nach Groß- und Kleinschreibung durch, was bedeutet, dass das ‚A‘ in ‚AeroSmith‘ nicht gezählt wird.

Wir könnten unsere Abfrage wie folgt ändern, um eine Suche ohne Beachtung der Groß- und Kleinschreibung wie folgt durchzuführen:

Jetzt, da wir start_position = 1 und match_parameter = ‚i‘ angegeben haben, gibt die Abfrage als Ergebnis 4 zurück. ‚A‘ in ‚AeroSmith‘ wird in der Rechnung enthalten sein.

Lassen Sie uns nun schnell zeigen, wie Sie diese Funktion mit einer Spalte verwenden würden.

Nehmen wir an, wir haben eine contact-Tabelle mit folgenden Daten:

contact_id last_name
1000 AeroSmith
2000 Joy
3000 Scorpions

Lassen Sie uns nun die folgende Abfrage ausführen:

Dies sind die Ergebnisse, die von der Abfrage zurückgegeben würden:

contact_id last_name total
1000 AeroSmith 4
2000 Joy 1
3000 Scorpions 3