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