SEARCH_IP¶
Sucht nach gültigen IPv4-Adressen in angegebenen Zeichenfolgen aus einer oder mehreren Tabellen, einschließlich Feldern in den Spalten VARIANT, OBJECT und ARRAY. Die Suche basiert auf einer einzelnen IP-Adresse oder einem Bereich von IP-Adressen, die Sie angeben. Wenn diese IP-Adresse mit einer IP-Adresse in der angegebenen Spalte oder im angegebenen Feld übereinstimmt, gibt die Funktion TRUE zurück.
Weitere Informationen zur Verwendung dieser Funktion finden Sie unter Verwenden der Volltextsuche.
Syntax¶
SEARCH_IP( <search_data>, <search_string> )
Argumente¶
search_data
Die Daten, die Sie suchen möchten, ausgedrückt als durch Kommas getrennte Listen von Zeichenfolgen, Spaltennamen oder Pfaden zu Feldern in VARIANT-Spalten. Die Suchdaten können auch aus einer einzelnen literalen Zeichenfolge bestehen, was nützlich für das Testen der Funktion sein kann.
Sie können das Platzhalterzeichen (
*
) angeben, wobei sich*
auf alle qualifizierten Spalten in allen Tabellen ausdehnt, die sich im Bereich der Funktion befinden. Qualifizierte Spalten sind diejenigen, die die Datentypen VARCHAR (Text), VARIANT, ARRAY und OBJECT haben. VARIANT-, ARRAY- und OBJECT-Daten werden für die Suche in Text umgewandelt. Sie können auch die Schlüsselwörter ILIKE und EXCLUDE zum Filtern verwenden.Weitere Informationen zu diesem Argument finden Sie in der Beschreibung
search_data
der SEARCH Funktion.search_string
Eine VARCHAR-Zeichenfolge, die eine der folgenden Angaben enthält:
Eine vollständige und gültige IP-Adresse im Standardformat IPv4, z. B.
192.0.2.1
.Eine gültige IP-Adresse im Standardformat IPv4 mit einem Classless Inter-Domain Routing-Bereich (CIDR) Bereich, wie z. B.
192.0.2.1/24
.Eine gültige IP Adresse im Standardformat IPv4 mit führenden Nullen, z. B.
192.000.002.001
(anstelle von192.0.2.1
). Die Funktion akzeptiert bis zu drei Ziffern für jeden Teil der IP-Adresse.
Dieses Argument muss eine Literal Zeichenfolge sein; Spaltennamen werden nicht unterstützt. Geben Sie ein Paar einfache Anführungszeichen um die Zeichenfolge an.
Sie können nicht mehr als eine IP-Adresse angeben. Sie können keine IPv6-Adresse oder IPv4-Teiladresse angeben.
Rückgabewerte¶
Gibt einen BOOLEAN-Wert zurück.
Gibt TRUE zurück, wenn eine gültige IP-Adresse in
search_string
angegeben ist und eine passende IP-Adresse insearch_data
gefunden wird.Gibt TRUE zurück, wenn in
search_string
eine gültige IP-Adresse mit einem CIDR-Bereich angegeben ist und insearch_data
eine IP-Adresse in dem angegebenen Bereich gefunden wird.Gibt TRUE zurück, wenn
search_string
leer ist und keine gültigen IP-Adressen insearch_data
gefunden werden.Gibt NULL zurück, wenn eines dieser Argumente NULL ist.
Andernfalls wird FALSE zurückgegeben.
Nutzungshinweise¶
Die SEARCH_IP-Funktion arbeitet nur mit VARCHAR-, VARIANT-, ARRAY- und OBJECT-Daten. Die Funktion gibt einen Fehler zurück, wenn das Argument
search_data
keine Daten dieser Datentypen enthält. Wenn das Argumentsearch_data
sowohl Daten von unterstützten als auch von nicht unterstützten Datentypen enthält, sucht die Funktion die Daten der unterstützten Datentypen und ignoriert die Daten der nicht unterstützten Datentypen. Weitere Beispiele finden Sie unter Beispiele für erwartete Fehlerfälle.Die SEARCH_IP-Funktion arbeitet nur mit VARCHAR-, VARIANT-, ARRAY- und OBJECT-Daten. Die Funktion gibt einen Fehler zurück, wenn Sie versuchen, andere Datentypen zu suchen. Weitere Beispiele finden Sie unter Beispiele für erwartete Fehlerfälle.
Sie können eine Optimierung der FULL_TEXT-Suche für Spalten hinzufügen, die das Ziel von SEARCH_IP-Funktionsaufrufen sind, indem Sie den Befehl ALTER TABLE verwenden, der die ENTITY_ANALYZER angibt. Beispiel:
ALTER TABLE ipt ADD SEARCH OPTIMIZATION ON FULL_TEXT( ip1, ANALYZER => 'ENTITY_ANALYZER');
Weitere Informationen finden Sie unter Aktivieren der FULL_TEXT-Suchoptimierung.
Beispiele¶
Die folgenden Beispiele zeigen, wie Sie die Funktion SEARCH_IP verwenden, um VARCHAR- und VARIANT-Spalten abzufragen.
Suche nach passenden IP-Adressen in VARCHAR-Spalten¶
Erstellen Sie eine Tabelle mit dem Namen ipt
und fügen Sie zwei Zeilen ein:
CREATE OR REPLACE TABLE ipt(id INT, ip1 VARCHAR(20), ip2 VARCHAR(20));
INSERT INTO ipt VALUES(1, '192.0.2.146', '203.0.113.5');
INSERT INTO ipt VALUES(2, '192.0.2.111', '192.000.002.146');
Führen Sie die folgenden Suchabfragen aus. Die erste Abfrage verwendet die Funktion SEARCH_IP in der SELECT-Liste und durchsucht die beiden VARCHAR-Spalten in der Tabelle:
SELECT ip1,
ip2,
SEARCH_IP((ip1, ip2), '192.0.2.146')
FROM ipt
ORDER BY ip1;
+-------------+-----------------+--------------------------------------+
| IP1 | IP2 | SEARCH_IP((IP1, IP2), '192.0.2.146') |
|-------------+-----------------+--------------------------------------|
| 192.0.2.111 | 192.000.002.146 | True |
| 192.0.2.146 | 203.0.113.5 | True |
+-------------+-----------------+--------------------------------------+
Beachten Sie, dass search_data
192.000.002.146
eine Übereinstimmung mit search_string
192.0.2.146
ist, obwohl 192.000.002.146
führende Nullen enthält.
Diese Abfrage zeigt eine search_string
mit einem CIDR-Bereich:
SELECT ip1,
ip2,
SEARCH_IP((ip1, ip2), '192.0.2.1/20')
FROM ipt
ORDER BY ip1;
+-------------+-----------------+---------------------------------------+
| IP1 | IP2 | SEARCH_IP((IP1, IP2), '192.0.2.1/20') |
|-------------+-----------------+---------------------------------------|
| 192.0.2.111 | 192.000.002.146 | True |
| 192.0.2.146 | 203.0.113.5 | True |
+-------------+-----------------+---------------------------------------+
Diese Abfrage zeigt, dass eine search_string
mit führenden Nullen True
für IP-Adressen liefert, bei denen die führenden Nullen weggelassen wurden:
SELECT ip1,
ip2,
SEARCH_IP((ip1, ip2), '203.000.113.005')
FROM ipt
ORDER BY ip1;
+-------------+-----------------+------------------------------------------+
| IP1 | IP2 | SEARCH_IP((IP1, IP2), '203.000.113.005') |
|-------------+-----------------+------------------------------------------|
| 192.0.2.111 | 192.000.002.146 | False |
| 192.0.2.146 | 203.0.113.5 | True |
+-------------+-----------------+------------------------------------------+
Diese Abfrage verwendet die Funktion in der WHERE-Klausel und sucht nur in der Spalte ip2
.
SELECT ip1,
ip2
FROM ipt
WHERE SEARCH_IP(ip2, '203.0.113.5')
ORDER BY ip1;
+-------------+-------------+
| IP1 | IP2 |
|-------------+-------------|
| 192.0.2.146 | 203.0.113.5 |
+-------------+-------------+
Wenn die Funktion in der WHERE-Klausel verwendet wird und es keine Übereinstimmung gibt, werden keine Werte zurückgegeben.
SELECT ip1,
ip2
FROM ipt
WHERE SEARCH_IP(ip2, '203.0.113.1')
ORDER BY ip1;
+-----+-----+
| IP1 | IP2 |
|-----+-----|
+-----+-----+
Sie können das Zeichen *
(oder table.*
) als erstes Argument für die SEARCH-Funktion verwenden, wie in diesem Beispiel gezeigt. Die Operation bezieht sich auf alle qualifizierten Spalten in der Tabelle, aus der Sie auswählen.
SELECT ip1,
ip2
FROM ipt
WHERE SEARCH_IP((*), '203.0.113.5')
ORDER BY ip1;
+-------------+-------------+
| IP1 | IP2 |
|-------------+-------------|
| 192.0.2.146 | 203.0.113.5 |
+-------------+-------------+
Sie können auch die Schlüsselwörter ILIKE und EXCLUDE zum Filtern verwenden. Weitere Informationen zu diesen Schlüsselwörtern finden Sie unter SELECT.
Diese Suche verwendet das Schlüsselwort ILIKE, um nur in Spalten zu suchen, die mit der Zeichenfolge ip
beginnen.
SELECT ip1,
ip2
FROM ipt
WHERE SEARCH_IP(* ILIKE 'ip%', '192.0.2.111')
ORDER BY ip1;
+-------------+-----------------+
| IP1 | IP2 |
|-------------+-----------------|
| 192.0.2.111 | 192.000.002.146 |
+-------------+-----------------+
Um die Optimierung der FULL_TEXT-Suche für die Spalten der Tabelle ipt
zu aktivieren, führen Sie den folgenden ALTER TABLE Befehl aus:
ALTER TABLE ipt ADD SEARCH OPTIMIZATION ON FULL_TEXT(
ip1,
ip2,
ANALYZER => 'ENTITY_ANALYZER');
Bemerkung
Die von Ihnen angegebenen Spalten müssen VARCHAR oder VARIANT-Spalten sein. Spalten mit anderen Datentypen werden nicht unterstützt.
Suche nach passenden IP-Adressen in einer VARIANT-Spalte¶
Dieses Beispiel verwendet die Funktion SEARCH_IP, um einen Pfad zu einem Feld in einer VARIANT-Spalte zu suchen. Erstellen Sie eine Tabelle mit dem Namen iptv
und fügen Sie zwei Zeilen ein:
CREATE OR REPLACE TABLE iptv(ip1 VARIANT);
INSERT INTO iptv(ip1)
SELECT PARSE_JSON(' { "ipv1": "203.0.113.5", "ipv2": "203.0.113.5" } ');
INSERT INTO iptv(ip1)
SELECT PARSE_JSON(' { "ipv1": "192.0.2.146", "ipv2": "203.0.113.5" } ');
Führen Sie die folgenden Suchabfragen aus. Die erste Abfrage durchsucht nur das Feld ipv1
. Die zweite Abfrage durchsucht ipv1
und ipv2
.
SELECT * FROM iptv
WHERE SEARCH_IP((ip1:"ipv1"), '203.0.113.5');
+--------------------------+
| IP1 |
|--------------------------|
| { |
| "ipv1": "203.0.113.5", |
| "ipv2": "203.0.113.5" |
| } |
+--------------------------+
SELECT * FROM iptv
WHERE SEARCH_IP((ip1:"ipv1",ip1:"ipv2"), '203.0.113.5');
+--------------------------+
| IP1 |
|--------------------------|
| { |
| "ipv1": "203.0.113.5", |
| "ipv2": "203.0.113.5" |
| } |
| { |
| "ipv1": "192.0.2.146", |
| "ipv2": "203.0.113.5" |
| } |
+--------------------------+
Um die Optimierung der FULL_TEXT-Suche für diese ip1
VARIANT Spalte und ihre Felder zu aktivieren, führen Sie den folgenden ALTER TABLE-Befehl aus:
ALTER TABLE iptv ADD SEARCH OPTIMIZATION ON FULL_TEXT(
ip1:"ipv1",
ip1:"ipv2",
ANALYZER => 'ENTITY_ANALYZER');
Bemerkung
Die von Ihnen angegebenen Spalten müssen VARCHAR oder VARIANT-Spalten sein. Spalten mit anderen Datentypen werden nicht unterstützt.
Beispiele für erwartete Fehlerfälle¶
Die folgenden Beispiele zeigen Abfragen, die erwartete Syntaxfehler zurückgeben.
Dieses Beispiel schlägt fehl, weil 5
kein unterstützter Datentyp für das Argument search_string
ist.
SELECT SEARCH_IP(ip1, 5) FROM ipt;
001045 (22023): SQL compilation error:
argument needs to be a string: '1'
Dieses Beispiel schlägt fehl, weil für das Argument search_data
keine Spalte eines unterstützten Datentyps angegeben ist.
SELECT SEARCH_IP(id, '192.0.2.146') FROM ipt;
001173 (22023): SQL compilation error: error line 1 at position 7: Expected non-empty set of columns supporting full-text search.
Dieses Beispiel ist erfolgreich, weil für das Argument search_data
eine Spalte eines unterstützten Datentyps angegeben ist. Die Funktion ignoriert die Spalte id
, da es sich nicht um einen unterstützten Datentyp handelt
SELECT SEARCH_IP((id, ip1), '192.0.2.146') FROM ipt;
+-------------------------------------+
| SEARCH_IP((ID, IP1), '192.0.2.146') |
|-------------------------------------|
| True |
| False |
+-------------------------------------+