- Categorias:
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:
Sintaxe¶
STRTOK(<string> [,<delimiter>] [,<partNr>])
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 ostring
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 | +-------------------------+
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 | +---------------------------------------+SELECT STRTOK('user@snowflake.com', '@.', 2); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 2) | |---------------------------------------| | snowflake | +---------------------------------------+SELECT STRTOK('user@snowflake.com', '@.', 3); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 3) | |---------------------------------------| | com | +---------------------------------------+
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 | +----------------------------------------+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 | +-------------------+
Aqui está um exemplo com uma cadeia de caracteres delimitadora vazia:
select strtok('a.b', '', 1); +----------------------+ | STRTOK('A.B', '', 1) | |----------------------| | a.b | +----------------------+
Aqui estão exemplos com valores NULL para cada um dos parâmetros:
select strtok(NULL, '.', 1); +----------------------+ | STRTOK(NULL, '.', 1) | |----------------------| | NULL | +----------------------+select strtok('a.b', NULL, 1); +------------------------+ | STRTOK('A.B', NULL, 1) | |------------------------| | NULL | +------------------------+select strtok('a.b', '.', NULL); +--------------------------+ | STRTOK('A.B', '.', NULL) | |--------------------------| | NULL | +--------------------------+