Catégories :

Fonctions de données semi-structurées et structurées (tableau/objet)

ARRAY_CONTAINS

Renvoie TRUE si la valeur spécifiée se trouve dans le tableau spécifié.

Syntaxe

ARRAY_CONTAINS( <value_expr> , <array> )
Copy

Arguments

value_expr

Valeur à trouver dans array.

array

Le tableau à rechercher.

Renvoie

Cette fonction renvoie une valeur de type BOOLEAN ou NULL :

  • La fonction renvoie TRUE si value_expr est présent dans array.

  • La fonction renvoie FALSE si value_expr n’est pas présent dans array.

  • La fonction renvoie NULL si l’argument value_expr est NULL et qu’il n’y a pas de valeurs NULL dans le tableau.

    Si l’argument value_expr est NULL et qu’il y a une valeur NULL dans le tableau, la fonction renvoie TRUE.

Notes sur l’utilisation

La fonction ne prend pas en charge les caractères génériques dans value_expr. Toutefois, vous pouvez utiliser la fonction ARRAY_TO_STRING pour convertir un tableau en chaîne, puis effectuer une recherche dans la chaîne à l’aide de caractères génériques. Par exemple, vous pouvez spécifier des caractères génériques pour effectuer une recherche dans la chaîne renvoyée à l’aide des fonctions [ NOT ] LIKE et REGEXP_LIKE.

Exemples

Les requêtes suivantes utilisent la fonction ARRAY_CONTAINS dans une liste SELECT :

SELECT ARRAY_CONTAINS('hello'::VARIANT, ARRAY_CONSTRUCT('hello', 'hi'));
Copy
+------------------------------------------------------------------+
| ARRAY_CONTAINS('HELLO'::VARIANT, ARRAY_CONSTRUCT('HELLO', 'HI')) |
|------------------------------------------------------------------|
| True                                                             |
+------------------------------------------------------------------+
SELECT ARRAY_CONTAINS('hello'::VARIANT, ARRAY_CONSTRUCT('hola', 'bonjour'));
Copy
+----------------------------------------------------------------------+
| ARRAY_CONTAINS('HELLO'::VARIANT, ARRAY_CONSTRUCT('HOLA', 'BONJOUR')) |
|----------------------------------------------------------------------|
| False                                                                |
+----------------------------------------------------------------------+
SELECT ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('hola', 'bonjour'));
Copy
+----------------------------------------------------------+
| ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('HOLA', 'BONJOUR')) |
|----------------------------------------------------------|
| NULL                                                     |
+----------------------------------------------------------+
SELECT ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('hola', NULL));
Copy
+-----------------------------------------------------+
| ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('HOLA', NULL)) |
|-----------------------------------------------------|
| True                                                |
+-----------------------------------------------------+

La requête suivante utilise la fonction ARRAY_CONTAINS dans une clause WHERE. Tout d’abord, créez une table avec une colonne ARRAY et insérez des données :

CREATE OR REPLACE TABLE array_example (id INT, array_column ARRAY);

INSERT INTO array_example (id, array_column)
  SELECT 1, ARRAY_CONSTRUCT(1, 2, 3);

INSERT INTO array_example (id, array_column)
  SELECT 2, ARRAY_CONSTRUCT(4, 5, 6);

SELECT * FROM array_example;
Copy
+----+--------------+
| ID | ARRAY_COLUMN |
|----+--------------|
|  1 | [            |
|    |   1,         |
|    |   2,         |
|    |   3          |
|    | ]            |
|  2 | [            |
|    |   4,         |
|    |   5,         |
|    |   6          |
|    | ]            |
+----+--------------+

Exécutez une requête qui spécifie la valeur à rechercher pour value_expr et la colonne ARRAY pour array :

SELECT * FROM array_example WHERE ARRAY_CONTAINS(5, array_column);
Copy
+----+--------------+
| ID | ARRAY_COLUMN |
|----+--------------|
|  2 | [            |
|    |   4,         |
|    |   5,         |
|    |   6          |
|    | ]            |
+----+--------------+