- Categories:
Semi-structured and structured data functions (Array/Object)
ARRAY_CONTAINS¶
Returns TRUE if the specified value is found in the specified array.
Syntax¶
ARRAY_CONTAINS( <value_expr> , <array> )
Arguments¶
value_exprValue to find in
array.If
arrayis a semi-structured array,value_exprmust evaluate to a VARIANT.If
arrayis a structured array,value_exprmust evaluate to a type that is comparable to the type of the array.
arrayThe array to search.
Returns¶
This function returns a value of BOOLEAN type or NULL:
The function returns TRUE if
value_expris present inarray, including the following cases:When the
value_exprargument is NULL and there is a SQL NULL value in the array (undefined).When the
value_exprargument is JSON null and there is a JSON null value in the array (null).
The function returns FALSE if
value_exprisn’t present inarray, including when thevalue_exprargument is JSON null and there are no JSON null values in the array.The function returns NULL if the
value_exprargument is NULL and there are no SQL NULL values in the array.
For more information about NULL values in arrays, see NULL values.
Usage notes¶
The function does not support wildcards in
value_expr. However, you can use the ARRAY_TO_STRING function to convert an array to a string, then search the string with wildcard characters. For example, you can specify wildcards to search the returned string using the [ NOT ] LIKE and REGEXP_LIKE functions.If
arrayis a semi-structured array, explicit casting of thevalue_exprvalue to a VARIANT value is required for values of the following data types:The following example explicitly casts a string value to a VARIANT value:
SELECT ARRAY_CONTAINS('mystring2'::VARIANT, ARRAY_CONSTRUCT('mystring1', 'mystring2'));
Explicit casting isn’t required for values of other data types.
Examples¶
The following queries use the ARRAY_CONTAINS function in a SELECT list.
In this example, the function returns TRUE because the value_expr argument is 'hello'
and the array contains a VARIANT value that stores the string 'hello':
SELECT ARRAY_CONTAINS('hello'::VARIANT, ARRAY_CONSTRUCT('hello', 'hi'));
+------------------------------------------------------------------+
| ARRAY_CONTAINS('HELLO'::VARIANT, ARRAY_CONSTRUCT('HELLO', 'HI')) |
|------------------------------------------------------------------|
| True |
+------------------------------------------------------------------+
In this example, the function returns FALSE because the value_expr argument is 'hello'
but the array doesn’t contain a VARIANT value that stores the string 'hello':
SELECT ARRAY_CONTAINS('hello'::VARIANT, ARRAY_CONSTRUCT('hola', 'bonjour'));
+----------------------------------------------------------------------+
| ARRAY_CONTAINS('HELLO'::VARIANT, ARRAY_CONSTRUCT('HOLA', 'BONJOUR')) |
|----------------------------------------------------------------------|
| False |
+----------------------------------------------------------------------+
In this example, the function returns NULL because the value_expr argument is NULL but
the array doesn’t contain a SQL NULL value:
SELECT ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('hola', 'bonjour'));
+----------------------------------------------------------+
| ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('HOLA', 'BONJOUR')) |
|----------------------------------------------------------|
| NULL |
+----------------------------------------------------------+
In this example, the function returns TRUE because the value_expr argument is NULL and
the array contains a SQL NULL value:
SELECT ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('hola', NULL));
+-----------------------------------------------------+
| ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('HOLA', NULL)) |
|-----------------------------------------------------|
| True |
+-----------------------------------------------------+
In this example, the function returns TRUE because the value_expr argument is a
JSON null value and the array contains a JSON null value:
SELECT ARRAY_CONTAINS(PARSE_JSON('null'), ARRAY_CONSTRUCT('hola', PARSE_JSON('null')));
+---------------------------------------------------------------------------------+
| ARRAY_CONTAINS(PARSE_JSON('NULL'), ARRAY_CONSTRUCT('HOLA', PARSE_JSON('NULL'))) |
|---------------------------------------------------------------------------------|
| True |
+---------------------------------------------------------------------------------+
In this example, the function returns NULL because the value_expr argument is
NULL but the array doesn’t contain a SQL NULL value (although it does contain a JSON null value):
SELECT ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('hola', PARSE_JSON('null')));
+-------------------------------------------------------------------+
| ARRAY_CONTAINS(NULL, ARRAY_CONSTRUCT('HOLA', PARSE_JSON('NULL'))) |
|-------------------------------------------------------------------|
| NULL |
+-------------------------------------------------------------------+
The following query uses the ARRAY_CONTAINS function in a WHERE clause. First, create a table with an ARRAY column and insert data:
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;
+----+--------------+
| ID | ARRAY_COLUMN |
|----+--------------|
| 1 | [ |
| | 1, |
| | 2, |
| | 3 |
| | ] |
| 2 | [ |
| | 4, |
| | 5, |
| | 6 |
| | ] |
+----+--------------+
Run a query that specifies the value to find for value_expr and the
ARRAY column for array:
SELECT * FROM array_example WHERE ARRAY_CONTAINS(5, array_column);
+----+--------------+
| ID | ARRAY_COLUMN |
|----+--------------|
| 2 | [ |
| | 4, |
| | 5, |
| | 6 |
| | ] |
+----+--------------+