- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Zuordnung/Map)
MAP_CONTAINS_KEY¶
Ermittelt, ob der angegebene MAP-Typ den angegebenen Schlüssel enthält.
Syntax¶
MAP_CONTAINS_KEY( <key> , <map> )
Argumente¶
key
Der zu suchende Schlüssel.
map
Die zu durchsuchende Zuordnung.
Rückgabewerte¶
Gibt TRUE zurück, wenn die angegebene Zuordnung den angegebenen Schlüssel enthält.
Gibt FALSE zurück, wenn die angegebene Zuordnung den angegebenen Schlüssel nicht enthält.
Nutzungshinweise¶
Der Typ des Schlüsselausdrucks muss mit dem Typ des Schlüssels der Zuordnung übereinstimmen. Wenn der Typ VARCHAR ist, können die Typen unterschiedlich lang sein.
Bei Eingabe von NULL lautet die Ausgabe NULL.
Beispiele¶
Die Funktion sucht den Schlüssel k1
und findet ihn in der Zuordnung:
SELECT MAP_CONTAINS_KEY(
'k1',{'k1':'v1','k2':'v2','k3':'v3'}::MAP(VARCHAR,VARCHAR))
AS contains_key;
+--------------+
| CONTAINS_KEY |
|--------------|
| True |
+--------------+
Die Funktion sucht den Schlüssel k1
und findet ihn nicht in der Zuordnung:
SELECT MAP_CONTAINS_KEY(
'k1',{'ka':'va','kb':'vb','kc':'vc'}::MAP(VARCHAR,VARCHAR))
AS contains_key;
+--------------+
| CONTAINS_KEY |
|--------------|
| False |
+--------------+
Eine SELECT-Anweisung übergibt einen Schlüssel, der einen anderen Typ verwendet als der Schlüssel in der Zuordnung:
SELECT MAP_CONTAINS_KEY(
'k1',{'1':'va','2':'vb','3':'vc'}::MAP(NUMBER,VARCHAR))
AS contains_key;
001065 (22023): SQL compilation error:
Function MAP_CONTAINS_KEY cannot be used with arguments of types VARCHAR(2) and MAP(NUMBER(38,0), VARCHAR(134217728))
Erstellen Sie eine temporäre Tabelle, die MAP-Werte enthält:
CREATE OR REPLACE TEMP TABLE demo_maps(
id INTEGER,
attrs MAP(VARCHAR, VARCHAR),
defaults MAP(VARCHAR, VARCHAR),
keep_keys ARRAY(VARCHAR),
ins_key VARCHAR,
ins_val VARCHAR,
update_existing BOOLEAN,
del_key1 VARCHAR,
del_key2 VARCHAR);
INSERT INTO demo_maps SELECT
1,
{'color':'red','size':'M','brand':'Acme'}::MAP(VARCHAR, VARCHAR),
{'currency':'USD','size':'L'}::MAP(VARCHAR, VARCHAR),
['color','brand']::ARRAY(VARCHAR),
'material',
'cotton',
TRUE,
'size',
'brand';
INSERT INTO demo_maps SELECT
2,
{'color':'blue','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
{'currency':'EUR','size':'M','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
['brand','currency']::ARRAY(VARCHAR),
'brand',
'ZC',
FALSE,
'currency',
'material';
Fragen Sie die Tabelle ab, um die Daten anzuzeigen:
SELECT * FROM demo_maps;
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
| ID | ATTRS | DEFAULTS | KEEP_KEYS | INS_KEY | INS_VAL | UPDATE_EXISTING | DEL_KEY1 | DEL_KEY2 |
|----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------|
| 1 | { | { | [ | material | cotton | True | size | brand |
| | "brand": "Acme", | "currency": "USD", | "color", | | | | | |
| | "color": "red", | "size": "L" | "brand" | | | | | |
| | "size": "M" | } | ] | | | | | |
| | } | | | | | | | |
| 2 | { | { | [ | brand | ZC | False | currency | material |
| | "brand": "ZenCo", | "brand": "ZenCo", | "brand", | | | | | |
| | "color": "blue" | "currency": "EUR", | "currency" | | | | | |
| | } | "size": "M" | ] | | | | | |
| | | } | | | | | | |
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
Stellen Sie fest, ob die Zuordnung in der attrs
-Spalte den Schlüssel in der ins_key
-Spalte enthält:
SELECT id, MAP_CONTAINS_KEY(ins_key, attrs) AS has_key
FROM demo_maps;
+----+---------+
| ID | HAS_KEY |
|----+---------|
| 1 | False |
| 2 | True |
+----+---------+
Die Ausgabe zeigt Folgendes:
Die Zuordnung in der
attrs
-Spalte in Zeile1
enthält nicht den Schlüssel (material
) in derins_key
-Spalte.Die Zuordnung in der
attrs
-Spalte in Zeile2
enthält den Schlüssel (brand
) in derins_key
-Spalte.