Перейти к содержимому
Последнее обновление

ARRAY_JOIN

array_join​

SinceVersion 2.0.0

Описание​

Объединяет элементы массива в строку. Функция преобразует все элементы массива в строки, а затем соединяет их с помощью указанного разделителя.

Синтаксис​

array_join(ARRAY<T> arr, STRING separator [, STRING null_replacement])

Параметры​

  • arr:тип ARRAY, массив, элементы которого нужно объединить
  • separator:тип STRING, обязательный параметр, разделитель между элементами массива
  • null_replacement:тип STRING, необязательный параметр, строка для замены значений NULL в массиве. Если этот параметр не указан, значения NULL пропускаются

Поддерживаемые типы T:

  • Числовые типы: TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL
  • Строковые типы: CHAR, VARCHAR, STRING
  • Типы даты и времени: DATE, DATETIME, DATEV2, DATETIMEV2
  • Логический тип: BOOLEAN
  • Типы IP: IPV4, IPV6

Возвращаемое значение​

Тип возвращаемого значения: STRING

Описание возвращаемого значения:

  • Возвращает строку, содержащую все элементы массива, соединённые разделителем
  • NULL: если входной массив равен NULL

Примечания по использованию:

  • Функция преобразует каждый элемент массива в строку и соединяет их с помощью указанного разделителя
  • Обработка элементов массива со значением NULL:
    • Если параметр null_replacement указан, элементы со значением NULL заменяются этой строкой
    • Если параметр null_replacement не указан, элементы со значением NULL пропускаются
  • Для пустых массивов возвращаются пустые строки

Примеры запросов:

Объединение элементов массива с разделителем:

SELECT array_join([1, 2, 3, 4, 5], ',');
+--------------------------------------+
| array_join([1, 2, 3, 4, 5], ',') |
+--------------------------------------+
| 1,2,3,4,5 |
+--------------------------------------+

Объединение элементов строкового массива с пробелом в качестве разделителя:

SELECT array_join(['hello', 'world', 'doris'], ' ');
+--------------------------------------------------+
| array_join(['hello', 'world', 'doris'], ' ') |
+--------------------------------------------------+
| hello world doris |
+--------------------------------------------------+

Объединение элементов массива, содержащего значения NULL (значения NULL пропускаются):

SELECT array_join([1, null, 3, null, 5], '-');
+--------------------------------------------+
| array_join([1, null, 3, null, 5], '-') |
+--------------------------------------------+
| 1-3-5 |
+--------------------------------------------+

Замена значений NULL с помощью параметра null_replacement:

SELECT array_join([1, null, 3, null, 5], '-', 'NULL');
+--------------------------------------------------+
| array_join([1, null, 3, null, 5], '-', 'NULL') |
+--------------------------------------------------+
| 1-NULL-3-NULL-5 |
+--------------------------------------------------+

Объединение элементов массива чисел с плавающей точкой:

SELECT array_join([1.1, 2.2, 3.3], ' | ');
+------------------------------------------+
| array_join([1.1, 2.2, 3.3], ' | ') |
+------------------------------------------+
| 1.1 | 2.2 | 3.3 |
+------------------------------------------+

Объединение элементов массива дат:

SELECT array_join(CAST(['2023-01-01', '2023-06-15', '2023-12-31'] AS ARRAY<DATETIME>), ' to ');
+-----------------------------------------------------------------------------------------+
| array_join(CAST(['2023-01-01', '2023-06-15', '2023-12-31'] AS ARRAY<DATETIME>), ' to ') |
+-----------------------------------------------------------------------------------------+
| 2023-01-01 00:00:00 to 2023-06-15 00:00:00 to 2023-12-31 00:00:00 |
+-----------------------------------------------------------------------------------------+

Объединение элементов массива IP-адресов:

SELECT array_join(CAST(['192.168.1.1', '192.168.1.2', '192.168.1.3'] AS ARRAY<IPV4>), ' -> ');
+----------------------------------------------------------------------------------+
| array_join(CAST(['192.168.1.1', '192.168.1.2', '192.168.1.3'] AS ARRAY<IPV4>), ' -> ') |
+----------------------------------------------------------------------------------+
| 192.168.1.1 -> 192.168.1.2 -> 192.168.1.3 |
+----------------------------------------------------------------------------------+

Для пустых массивов возвращаются пустые строки:

SELECT array_join([], ',');
+----------------------+
| array_join([], ',') |
+----------------------+
| |
+----------------------+

Для массивов со значением NULL возвращается NULL:

SELECT array_join(NULL, ',');
+----------------------+
| array_join(NULL, ',') |
+----------------------+
| NULL |
+----------------------+

Ошибка при передаче сложных типов:

SELECT array_join([{'name':'Alice','age':20}, {'name':'Bob','age':30}], '; ');
ERROR 1105 (HY000): errCode = 2, detailMessage = can not cast from origin type ARRAY<MAP<TEXT,TEXT>> to target type=ARRAY<VARCHAR(65533)>

Ошибка при неверном количестве параметров:

SELECT array_join([1,2,3], ',', 'extra', 'too_many');
ERROR 1105 (HY000): errCode = 2, detailMessage = Can not found function 'array_join' which has 4 arity. Candidate functions are: [array_join(Expression, Expression, Expression), array_join(Expression, Expression)]

Ошибка при передаче типов, отличных от массива:

SELECT array_join('not_an_array', ',');
ERROR 1105 (HY000): errCode = 2, detailMessage = Can not find the compatibility function signature: array_join(VARCHAR(12), VARCHAR(1))

Ключевые слова​

ARRAY, JOIN, ARRAY_JOIN