- Kategorien:
REGEXP_LIKE¶
Führt einen Vergleich aus, um festzustellen, ob eine Zeichenfolge mit einem angegebenen Muster übereinstimmt. Beide Eingaben müssen Textausdrücke sein.
REGEXP_LIKE ähnelt der Funktion LIKE, bietet jedoch erweiterte reguläre POSIX-Ausdrücke anstelle von SQL LIKE-Mustersyntax. REGEXP_LIKE unterstützt komplexere Abgleichsbedingungen als LIKE.
Tipp
Sie können den Suchoptimierungsdienst verwenden, um die Leistung von Abfragen zu verbessern, die diese Funktion aufrufen. Weitere Details dazu finden Sie unter Suchoptimierungsdienst.
- Aliasse:
RLIKE (1. Syntax)
Syntax¶
REGEXP_LIKE( <subject> , <pattern> [ , <parameters> ] )
Argumente¶
Benötigt:
subjectDie Zeichenfolge, nach der gesucht werden soll.
patternAbzugleichendes Muster.
Richtlinien zur Angabe von Mustern finden Sie unter Zeichenfolgenfunktionen (reguläre Ausdrücke).
Optional:
parametersZeichenfolge aus einem oder mehreren Zeichen, in der die Parameter angegeben sind, die zur Suche nach Übereinstimmungen verwendet werden. Unterstützte Werte:
Parameter
Beschreibung
cAbgleich, bei dem zwischen Groß- und Kleinschreibung unterschieden wird
iAbgleich ohne Berücksichtigung der Groß-/Kleinschreibung
mMehrzeiliger Modus.
eUntergeordnete Übereinstimmungen extrahieren
sPOSIX-Platzhalterzeichen
.im einzeiligen Modus stimmt mit\nübereinStandard:
cWeitere Informationen dazu finden Sie unter Angeben der Parameter für reguläre Ausdrücke.
Rückgabewerte¶
Gibt einen BOOLEAN-Wert oder NULL zurück.
Gibt TRUE zurück, wenn es eine Übereinstimmung gibt.
Gibt FALSE zurück, wenn es keine Übereinstimmung gibt.
Gibt NULL zurück, wenn ein Argument NULL ist.
Nutzungshinweise¶
Die Funktion verankert ein Muster implizit an beiden Enden (zum Beispiel wird
''automatisch zu'^$', und'ABC'wird automatisch zu'^ABC$'). Um beispielsweise eine beliebige Zeichenfolge, die mitABCbeginnt, abzugleichen, ist das Muster'ABC.*'.Das Backslash-Zeichen (
\) ist das Escapezeichen. Weitere Informationen dazu finden Sie unter Angeben von regulären Ausdrücken in Zeichenfolgenkonstante in einfachen Anführungszeichen.Weitere Nutzungshinweise zur Verwendung der Funktionen für reguläre Ausdrücke finden Sie unter Allgemeine Nutzungshinweise.
Sortierungsdetails¶
Arguments with collation specifications currently aren’t supported.
Beispiele¶
Die folgenden Beispiele verwenden die Funktion REGEXP_LIKE.
Ausführen grundlegender Abfragen mit regulären Ausdrücken für Zeichenfolgen
Ausführen von Abfragen mit regulären Ausdrücken für Zeichenfolgen mit Sonderzeichen
Weitere Beispiele für reguläre Ausdrücke finden Sie unter REGEXP.
Ausführen grundlegender Abfragen mit regulären Ausdrücken für Zeichenfolgen¶
Erstellen Sie eine Tabelle mit den Namen der Städte:
CREATE OR REPLACE TABLE cities(city VARCHAR(20));
INSERT INTO cities VALUES
('Sacramento'),
('San Francisco'),
('San Luis Obispo'),
('San Jose'),
('Santa Barbara'),
('Palo Alto'),
(NULL);
Sie können .* als Platzhalter verwenden, um so viele Zeichen wie möglich abzugleichen. Das folgende Beispiel entspricht dem Muster Fran an einer beliebigen Stelle im Zeichenfolgenwert:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*Fran.*');
+---------------+
| CITY |
|---------------|
| San Francisco |
+---------------+
Im folgenden Beispiel wird der i-Parameter verwendet, ohne dass die Groß- und Kleinschreibung berücksichtigt wird:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*fran.*', 'i');
+---------------+
| CITY |
|---------------|
| San Francisco |
+---------------+
Um ein Muster zu finden, das mit dem Anfang eines Zeichenfolgenwerts übereinstimmt, führen Sie eine Abfrage aus, die einen Platzhalter verwendet:
SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*', 'i');
+-----------------+
| CITY |
|-----------------|
| San Francisco |
| San Luis Obispo |
| San Jose |
| Santa Barbara |
+-----------------+
Um eine Abfrage unter Berücksichtigung der Groß-/Kleinschreibung mit einem Platzhalter auszuführen, lassen Sie den i-Parameter weg:
SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*');
+------+
| CITY |
|------|
+------+
Sie können das \w+-Metazeichen verwenden, um ein Wort abzugleichen, und das \s-Metazeichen, um ein Leerzeichen, wie ein Leerzeichen oder einen Tabulator, abzugleichen. Die folgende Abfrage sucht nach den Werten, die ein Wort enthalten, gefolgt von einem Leerzeichen, gefolgt von einem Wort:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\s\\w+');
+---------------+
| CITY |
|---------------|
| San Francisco |
| San Jose |
| Santa Barbara |
| Palo Alto |
+---------------+
Die Ausgabe für die Abfrage enthält nicht San Luis Obispo, da dieser Wert drei Wörter mit einem Leerzeichen zwischen dem ersten und zweiten Wort enthält, anstatt nur zwei Wörter mit einem Leerzeichen dazwischen.
In einem regulären Ausdruck können Sie oft ein Großbuchstaben-Metazeichen verwenden, um die Bedeutung eines Kleinbuchstaben-Metazeichens zu negieren. Führen Sie zum Beispiel eine Abfrage aus, die nach Werten sucht, die kein Leerzeichen zwischen zwei Wörtern enthalten, indem Sie das \S-Metazeichen verwenden:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\S\\w+');
+------------+
| CITY |
|------------|
| Sacramento |
+------------+
Ausführen von Abfragen mit regulären Ausdrücken für Zeichenfolgen mit Sonderzeichen¶
Die Beispiele in diesem Abschnitt suchen nach Werten mit Sonderzeichen, d. h. anderen Zeichen als a-z, A-Z, Unterstrich („_“) oder Dezimalziffern.
Um nach einem Metazeichen zu suchen, können Sie das Metazeichen mit Escapezeichen versehen. Weitere Informationen dazu finden Sie unter Angeben von regulären Ausdrücken in Zeichenfolgenkonstante in einfachen Anführungszeichen.
Erstellen Sie eine Tabelle, und fügen Sie dann einige Werte mit Sonderzeichen ein:
CREATE OR REPLACE TABLE regex_special_characters(v VARCHAR(20));
INSERT INTO regex_special_characters VALUES
('Snow'),
('Sn.ow'),
('Sn@ow'),
('Sn$ow'),
('Sn\\ow');
Der erste eingefügte Wert enthält keine Sonderzeichen.
Fragen Sie die Tabelle ab, um die Daten anzuzeigen:
SELECT * FROM regex_special_characters;
+-------+
| V |
|-------|
| Snow |
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+
Sie können nach einem beliebigen Sonderzeichen suchen, indem Sie die Perl-Backslash-Sequenz \W verwenden, die nach Zeichen sucht, die keine „Wort“-Zeichen sind. Die folgende Abfrage sucht zum Beispiel nach den Werten in der Tabelle, die Sonderzeichen enthalten:
SELECT *
FROM regex_special_characters
WHERE REGEXP_LIKE(v, '.*\\W.*');
+-------+
| V |
|-------|
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+
Für die Suche nach Metazeichen in einer Konstante in einfachen Anführungszeichen müssen Sie das Metazeichen mit zwei Backslashes als Escapezeichen versehen. Die folgende Abfrage sucht zum Beispiel nach den Werten, die das $-Metazeichen enthalten:
SELECT *
FROM regex_special_characters
WHERE REGEXP_LIKE(v, '.*\\$.*');
+-------+
| V |
|-------|
| Sn$ow |
+-------+
Wenn Sie nach einem Backslash suchen, ist ein zusätzliches Backslash-Escapezeichen erforderlich. Die folgende Abfrage sucht zum Beispiel nach den Werten, die das \- oder das .-Metazeichen enthalten:
SELECT *
FROM regex_special_characters
WHERE REGEXP_LIKE(v, '.*(\\.|\\\\).*');
+-------+
| V |
|-------|
| Sn.ow |
| Sn\ow |
+-------+