Categorias:

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

STRTOK

Tokeniza uma determinada cadeia de caracteres e retorna a parte solicitada.

Se a peça solicitada não existir, então NULL é retornado. Se algum parâmetro for NULL, então NULL é retornado.

Consulte também:

SPLIT_PART

Sintaxe

STRTOK(<string> [,<delimiter>] [,<partNr>])
Copy

Argumentos

Obrigatório:

string

Texto a ser tokenizado.

Opcional:

delimiter

Texto que representa o conjunto de delimitadores a serem utilizados. Cada caractere na cadeia de caracteres de delimitadores é um delimitador. Se o delimitador estiver vazio, e o string estiver vazio, então a função retorna NULL. Se o delimitador estiver vazio, e o string não estiver vazio, então toda a cadeia de caracteres será tratada como um token. O valor padrão do delimitador é um único caractere de espaço.

partNr

Token solicitado, que é baseado em 1 (ou seja, o primeiro token é o número do token 1, não o número do token 0). Se o número do token estiver fora da faixa, então NULL é retornado. O valor padrão é 1.

Retornos

O tipo de dados do valor retornado é VARCHAR.

Notas de uso

Se a cadeia de caracteres começar ou terminar com o delimitador, o sistema considera o espaço vazio antes ou depois do delimitador, respectivamente, como um token válido.

Assim como o Linux strtok(), STRTOK nunca retorna uma cadeia de caracteres vazia como um símbolo.

Exemplos

Aqui está um exemplo simples de utilização do STRTOK:

SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a                       |
+-------------------------+
Copy

Este exemplo mostra como usar múltiplos delimitadores para retornar o primeiro, segundo e terceiro tokens quando os delimitadores são ‘@’ e ‘.’.

SELECT STRTOK('user@snowflake.com', '@.', 1);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 1) |
|---------------------------------------|
| user                                  |
+---------------------------------------+
Copy
SELECT STRTOK('user@snowflake.com', '@.', 2);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake                             |
+---------------------------------------+
Copy
SELECT STRTOK('user@snowflake.com', '@.', 3);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com                                   |
+---------------------------------------+
Copy

Isto demonstra o que acontece se você tentar indexar além do último token possível na cadeia de caracteres:

select strtok('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL                                   |
+----------------------------------------+
Copy

Neste exemplo, como a cadeia de caracteres de entrada está vazia, há 0 elemento e, portanto, o elemento #1 ultrapassa o final da cadeia de caracteres, então a função retorna NULL em vez de uma cadeia de caracteres vazia:

select strtok('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL              |
+-------------------+
Copy

Aqui está um exemplo com uma cadeia de caracteres delimitadora vazia:

select strtok('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b                  |
+----------------------+
Copy

Aqui estão exemplos com valores NULL para cada um dos parâmetros:

select strtok(NULL, '.', 1);
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL                 |
+----------------------+
Copy
select strtok('a.b', NULL, 1);
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL                   |
+------------------------+
Copy
select strtok('a.b', '.', NULL);
+--------------------------+
| STRTOK('A.B', '.', NULL) |
|--------------------------|
| NULL                     |
+--------------------------+
Copy