- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)
ARRAY_EXCEPT¶
Gibt ein neues ARRAY zurück, das die Elemente aus einem Eingabe-ARRAY enthält, die nicht in einem anderen Eingabe-ARRAY enthalten sind.
Die Funktion ist NULL-sicher, d. h. sie behandelt NULL-Werte beim Vergleichen auf Gleichheit als bekannte Werte.
- Siehe auch:
Syntax¶
ARRAY_EXCEPT( <source_array> , <array_of_elements_to_exclude> )
Argumente¶
source_arrayEin Array, das die Elemente enthält, die in das neue ARRAY eingefügt werden sollen.
array_of_elements_to_excludeEin Array, das die Elemente enthält, die nicht in das neue ARRAY eingefügt werden sollen.
Rückgabewerte¶
Diese Funktion gibt ein ARRAY zurück, das die Elemente aus source_array enthält, die nicht in array_of_elements_to_exclude enthalten sind.
Wenn nach Ausschluss der Elemente in array_of_elements_to_exclude aus source_array keine Elemente übrig bleiben, gibt die Funktion ein leeres ARRAY zurück.
Wenn eines oder beide Argumente NULL sind, gibt die Funktion NULL zurück.
Die Reihenfolge der Werte innerhalb des zurückgegebenen Arrays ist nicht angegeben.
Nutzungshinweise¶
Wenn Sie Daten vom Typ OBJECT vergleiche, müssen die Objekte identisch sein, um als übereinstimmend zu gelten. Weitere Details dazu finden Sie unter Beispiele (unter diesem Thema).
In Snowflake sind Arrays Multimengen, keine Mengen. Mit anderen Worten: Arrays können mehrere Kopien desselben Wertes enthalten.
ARRAY_EXCEPTvergleicht Arrays mithilfe der Multimengen-Semantik (engl. auch „Bag Semantics“ genannt). Wennsource_arraymehrere Kopien eines Wertes enthält, entfernt die Funktion nur die Anzahl der Kopien dieses Wertes, die inarray_of_elements_to_excludeangegeben sind.Mit anderen Worten, wenn
source_arrayN Kopien eines Wertes hat undarray_of_elements_to_excludeM Kopien desselben Wertes hat, schließt die Funktion M Kopien des Wertes aus dem zurückgegebenen Array aus. Die Anzahl der Kopien des Wertes im zurückgegebenen Array ist N-M oder 0, wenn M größer als N ist.Wenn beispielsweise
source_array5 Elemente mit dem Wert'A'undarray_of_elements_to_exclude2 Elemente mit dem Wert'A'enthält, enthält das zurückgegebene Array 3 Elemente mit dem Wert'A'.
Beide Argumente müssen entweder strukturierte ARRAYs oder semistrukturierte ARRAYs sein.
Wenn Sie ein strukturiertes ARRAY übergeben:
Das ARRAY im zweiten Argument muss vergleichbar mit dem ARRAY im ersten Argument sein.
Die Funktion gibt ein strukturiertes ARRAY vom gleichen Typ wie das ARRAY im ersten Argument zurück.
Beispiele¶
Die Beispiele in diesem Abschnitt verwenden die ARRAY-Konstanten und die OBJECT-Konstanten, um die ARRAYs und die OBJECTs anzugeben.
Im folgenden Beispiel wird die Verwendung der Funktion gezeigt:
SELECT ARRAY_EXCEPT(['A', 'B'], ['B', 'C']);
+--------------------------------------+
| ARRAY_EXCEPT(['A', 'B'], ['B', 'C']) |
|--------------------------------------|
| [ |
| "A" |
| ] |
+--------------------------------------+
Im folgenden Beispiel wird das Element 'C' zu source_array hinzugefügt. Das zurückgegebene ARRAY schließt 'C' aus, da 'C' auch in array_of_elements_to_exclude angegeben ist.
SELECT ARRAY_EXCEPT(['A', 'B', 'C'], ['B', 'C']);
+-------------------------------------------+
| ARRAY_EXCEPT(['A', 'B', 'C'], ['B', 'C']) |
|-------------------------------------------|
| [ |
| "A" |
| ] |
+-------------------------------------------+
Im folgenden Beispiel enthält source_array 3 Elemente mit dem Wert 'B'. Da array_of_elements_to_exclude nur 1 'B'-Element enthält, schließt die Funktion nur 1 'B'-Element aus und gibt ein ARRAY zurück, das die anderen 2 'B'-Elemente enthält.
SELECT ARRAY_EXCEPT(['A', 'B', 'B', 'B', 'C'], ['B']);
+------------------------------------------------+
| ARRAY_EXCEPT(['A', 'B', 'B', 'B', 'C'], ['B']) |
|------------------------------------------------|
| [ |
| "A", |
| "B", |
| "B", |
| "C" |
| ] |
+------------------------------------------------+
Im folgenden Beispiel bleiben nach dem Ausschluss der Elemente in array_of_elements_to_exclude aus source_array keine Elemente übrig. Als Ergebnis gibt die Funktion ein leeres ARRAY zurück.
SELECT ARRAY_EXCEPT(['A', 'B'], ['A', 'B']);
+--------------------------------------+
| ARRAY_EXCEPT(['A', 'B'], ['A', 'B']) |
|--------------------------------------|
| [] |
+--------------------------------------+
Im folgenden Beispiel wird gezeigt, wie die Funktion die NULL-Elemente als bekannte Werte behandelt. Wie bereits erläutert, enthält source_array ein NULL-Element mehr als array_of_elements_to_exclude, sodass das zurückgegebene ARRAY nur ein NULL-Element ausschließt und das andere (das als undefined ausgegeben wird) einschließt.
SELECT ARRAY_EXCEPT(['A', NULL, NULL], ['B', NULL]);
+----------------------------------------------+
| ARRAY_EXCEPT(['A', NULL, NULL], ['B', NULL]) |
|----------------------------------------------|
| [ |
| "A", |
| undefined |
| ] |
+----------------------------------------------+
Im folgenden Beispiel enthalten source_array und array_of_elements_to_exclude die gleiche Anzahl von NULL-Elementen, sodass das zurückgegebene ARRAY die NULL-Elemente ausschließt.
SELECT ARRAY_EXCEPT(['A', NULL, NULL], [NULL, 'B', NULL]);
+----------------------------------------------------+
| ARRAY_EXCEPT(['A', NULL, NULL], [NULL, 'B', NULL]) |
|----------------------------------------------------|
| [ |
| "A" |
| ] |
+----------------------------------------------------+
Im folgenden Beispiel wird gezeigt, wie die Angabe desselben Objekts in source_array und array_of_elements_to_exclude dieses Objekt aus dem zurückgegebenen ARRAY ausschließt:
SELECT ARRAY_EXCEPT([{'a': 1, 'b': 2}, 1], [{'a': 1, 'b': 2}, 3]);
+------------------------------------------------------------+
| ARRAY_EXCEPT([{'A': 1, 'B': 2}, 1], [{'A': 1, 'B': 2}, 3]) |
|------------------------------------------------------------|
| [ |
| 1 |
| ] |
+------------------------------------------------------------+
Im folgenden Beispiel wird gezeigt, dass die Übergabe von NULL dazu führt, dass die Funktion NULL zurückgibt.
SELECT ARRAY_EXCEPT(['A', 'B'], NULL);
+--------------------------------+
| ARRAY_EXCEPT(['A', 'B'], NULL) |
|--------------------------------|
| NULL |
+--------------------------------+