Categorias:

Funções de cadeia de caracteres e binários (Geral) , Funções de tabela

STRTOK_SPLIT_TO_TABLE

Tokeniza uma cadeia de caracteres com o conjunto de delimitadores especificado e nivela os resultados em linhas.

Consulte também:

STRTOK, STRTOK_TO_ARRAY

Sintaxe

STRTOK_SPLIT_TO_TABLE(<string> [,<delimiter_list>])
Copy

Argumentos

Obrigatório:

string

Texto a ser tokenizado.

Opcional:

delimiter_list

Conjunto opcional de delimitadores. O valor padrão é um único caractere de espaço.

Saída

Esta função retorna as seguintes colunas:

Nome da coluna

Tipo de dados

Descrição

SEQ

NUMBER

Um número de sequência exclusivo associado ao registro de entrada. Não há garantia de que a sequência esteja livre de lacunas ou ordenada de nenhuma maneira específica.

INDEX

NUMBER

O índice de base um do elemento.

VALUE

VARCHAR

O valor do elemento da matriz nivelada.

Nota

A consulta também pode acessar as colunas da tabela original (correlacionada) que serviram como fonte de dados para esta função. Se uma única linha da tabela original resultou em várias linhas na exibição nivelada, os valores nessa linha de entrada são replicados para corresponder ao número de linhas produzidas por essa função.

Exemplos

Aqui está um exemplo simples de entrada constante.

SELECT table1.value
  FROM TABLE(STRTOK_SPLIT_TO_TABLE('a.b', '.')) AS table1
  ORDER BY table1.value;
Copy
+-------+
| VALUE |
|-------|
| a     |
| b     |
+-------+

Criar uma tabela e inserir dados:

CREATE OR REPLACE TABLE splittable_strtok (v VARCHAR);
INSERT INTO splittable_strtok (v) VALUES ('a b'), ('cde'), ('f|g'), ('');
SELECT * FROM splittable_strtok;
Copy
+-----+
| V   |
|-----|
| a b |
| cde |
| f|g |
|     |
+-----+

É possível usar a palavra-chave LATERAL com a função STRTOK_SPLIT_TO_TABLE para que a função seja executada em cada linha da tabela splittable_strtok como uma tabela correlacionada:

SELECT *
  FROM splittable_strtok, LATERAL STRTOK_SPLIT_TO_TABLE(splittable_strtok.v, ' ')
  ORDER BY SEQ, INDEX;
Copy
+-----+-----+-------+-------+
| V   | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b |   1 |     1 | a     |
| a b |   1 |     2 | b     |
| cde |   2 |     1 | cde   |
| f|g |   3 |     1 | f|g   |
+-----+-----+-------+-------+

Este exemplo é o mesmo que o anterior, exceto que ele especifica múltiplos delimitadores:

SELECT *
  FROM splittable_strtok, LATERAL STRTOK_SPLIT_TO_TABLE(splittable_strtok.v, ' |')
  ORDER BY SEQ, INDEX;
Copy
+-----+-----+-------+-------+
| V   | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b |   1 |     1 | a     |
| a b |   1 |     2 | b     |
| cde |   2 |     1 | cde   |
| f|g |   3 |     1 | f     |
| f|g |   3 |     2 | g     |
+-----+-----+-------+-------+

Crie outra tabela que contenha autores em uma coluna e alguns de seus títulos de livro em outra coluna. Nos dados de tabela, os títulos de livro podem ser separados por vírgula ou ponto e vírgula:

CREATE OR REPLACE TABLE authors_books_test2 (author VARCHAR, titles VARCHAR);
INSERT INTO authors_books_test2 (author, titles) VALUES
  ('Nathaniel Hawthorne', 'The Scarlet Letter ; The House of the Seven Gables;The Blithedale Romance'),
  ('Herman Melville', 'Moby Dick,The Confidence-Man');
SELECT * FROM authors_books_test2;
Copy
+---------------------+---------------------------------------------------------------------------+
| AUTHOR              | TITLES                                                                    |
|---------------------+---------------------------------------------------------------------------|
| Nathaniel Hawthorne | The Scarlet Letter ; The House of the Seven Gables;The Blithedale Romance |
| Herman Melville     | Moby Dick,The Confidence-Man                                              |
+---------------------+---------------------------------------------------------------------------+

Use a palavra-chave LATERAL e a função SPLIT_TO_TABLE para executar uma consulta que retorna uma linha separada para cada título. Além disso, use a função TRIM para remover espaços iniciais e final dos títulos. Observe que a lista SELECT inclui a coluna value fixa que é retornada pela função:

SELECT author, TRIM(value) AS title
  FROM authors_books_test2, LATERAL STRTOK_SPLIT_TO_TABLE(titles, ',;')
  ORDER BY author;
Copy
+---------------------+-------------------------------+
| AUTHOR              | TITLE                         |
|---------------------+-------------------------------|
| Herman Melville     | Moby Dick                     |
| Herman Melville     | The Confidence-Man            |
| Nathaniel Hawthorne | The Scarlet Letter            |
| Nathaniel Hawthorne | The House of the Seven Gables |
| Nathaniel Hawthorne | The Blithedale Romance        |
+---------------------+-------------------------------+