Categorias:

Funções de cadeia de caracteres e binários (General)

SPLIT

Divide uma determinada cadeia de caracteres com um separador especificado e retorna o resultado em uma matriz de cadeias de caracteres.

Cadeias de caracteres divididas contíguas na cadeia de caracteres de origem, ou a presença de uma cadeia de caracteres dividida no início ou no fim da cadeia de caracteres de origem, resulta em uma cadeia de caracteres vazia na saída. Uma cadeia de caracteres do separação vazia resulta em uma matriz contendo apenas a cadeia de caracteres de origem. Se qualquer um dos parâmetros for um NULL, um NULL é devolvido.

É possível usar funções e constructos que operam em matrizes no resultado, como FLATTEN, ARRAY_SIZE e acesso por posição de índice.

Consulte também:

SPLIT_PART

Sintaxe

SPLIT(<string>, <separator>)
Copy

Argumentos

string

Texto a ser dividido em partes.

separator

Texto a dividir a cadeia de caracteres.

Retornos

O tipo de dados do valor retornado é ARRAY.

Detalhes do agrupamento

Esta função não oferece suporte às seguintes especificações de agrupamento:

  • pi (não identifica pontuação).

  • cs-ai (diferencia maiúsculas e minúsculas, não identifica acentos).

Os valores na matriz de saída não incluem uma especificação de agrupamento e, portanto, não oferecem suporte a outras operações de agrupamento.

Exemplos

Dividir o endereço IP do host local 127.0.0.1 em uma matriz composta por cada uma das quatro partes:

SELECT SPLIT('127.0.0.1', '.');
Copy
+-------------------------+
| SPLIT('127.0.0.1', '.') |
|-------------------------|
| [                       |
|   "127",                |
|   "0",                  |
|   "0",                  |
|   "1"                   |
| ]                       |
+-------------------------+

Acessar o primeiro elemento da matriz retornada por posição de índice:

SELECT SPLIT('127.0.0.1', '.')[0];
Copy
+----------------------------+
| SPLIT('127.0.0.1', '.')[0] |
|----------------------------|
| "127"                      |
+----------------------------+

Dividir uma cadeia de caracteres que contém linhas verticais como separadores, que retorna uma saída com cadeias de caracteres vazias:

SELECT SPLIT('|a||', '|');
Copy
+--------------------+
| SPLIT('|A||', '|') |
|--------------------|
| [                  |
|   "",              |
|   "a",             |
|   "",              |
|   ""               |
| ]                  |
+--------------------+

Usar o resultado de SPLIT para gerar vários registros de uma única cadeia de caracteres usando o constructo LATERAL FLATTEN. FLATTEN é uma função de tabela que usa uma coluna VARIANT, OBJECT ou ARRAY e produz uma exibição lateral (ou seja, uma exibição em linha que contém uma correlação referente a outras tabelas que a precedem na cláusula FROM):

CREATE TABLE split_test_names(first_name VARCHAR, children VARCHAR);

INSERT INTO split_test_names values
  ('Mark', 'Marky,Mike,Maria'),
  ('John', 'Johnny,Jane');

SELECT * FROM split_test_names;
Copy
+------------+------------------+
| FIRST_NAME | CHILDREN         |
|------------+------------------|
| Mark       | Marky,Mike,Maria |
| John       | Johnny,Jane      |
+------------+------------------+
SELECT first_name, C.value::STRING AS childname
  FROM split_test_names,
    LATERAL FLATTEN(INPUT=>SPLIT(children, ',')) C;
Copy
+------------+-----------+
| FIRST_NAME | CHILDNAME |
|------------+-----------|
| Mark       | Marky     |
| Mark       | Mike      |
| Mark       | Maria     |
| John       | Johnny    |
| John       | Jane      |
+------------+-----------+