- 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:
Sintaxe¶
STRTOK_SPLIT_TO_TABLE(<string> [,<delimiter_list>])
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;
+-------+
| 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;
+-----+
| 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;
+-----+-----+-------+-------+
| 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;
+-----+-----+-------+-------+
| 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;
+---------------------+---------------------------------------------------------------------------+
| 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;
+---------------------+-------------------------------+
| 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 |
+---------------------+-------------------------------+