- Categorias:
STRTOK¶
Tokeniza uma determinada cadeia de caracteres e retorna a parte solicitada.
- Consulte também:
Sintaxe¶
STRTOK(<string> [,<delimiter>] [,<partNumber>])
Argumentos¶
Obrigatório:
stringTexto a ser tokenizado.
Opcional:
delimiterTexto que representa o conjunto de delimitadores a serem utilizados. Cada caractere na cadeia de caracteres do delimitador é um delimitador separado. Por exemplo, se o delimitador for
'@.', ambos'@'e'.'serão tratados como delimitadores. Esse comportamento é diferente no SPLIT_PART, que trata o delimitador inteiro como uma única cadeia de caracteres do delimitador.Se o delimitador estiver vazio, e o
stringestiver vazio, então a função retorna NULL. Se o delimitador estiver vazio estringnão estiver vazio, a cadeia de caracteres inteira será tratada como um token.Padrão: sem valor. Um único caractere de espaço
partNumberToken solicitado, que é baseado em 1; portanto, o primeiro token é o token número 1, e não o token número 0. Se o número do token estiver fora da faixa, então NULL é retornado.
Padrão: 1
Retornos¶
O tipo de dados do valor retornado é VARCHAR.
Se a parte solicitada não existir ou nenhum argumento for NULL, NULL será retornado.
Notas de uso¶
Assim como o Linux strtok(), STRTOK nunca retorna uma cadeia de caracteres vazia como um símbolo. Esse comportamento é diferente no SPLIT_PART, que pode retornar cadeias de caracteres vazias como partes quando a cadeia de caracteres de entrada começa ou termina com o delimitador, ou quando há delimitadores consecutivos.
Exemplos¶
Os exemplos a seguir chamam a função STRTOK:
Retornar o primeiro token em uma cadeia de caracteres¶
O exemplo simples a seguir chama STRTOK para retornar o primeiro token em uma cadeia de caracteres:
SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a |
+-------------------------+
Usar vários delimitadores para retornar tokens diferentes¶
Este exemplo mostra como usar vários 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 |
+---------------------------------------+
Demonstrar a indexação além do último token possível na cadeia de caracteres¶
O exemplo a seguir demonstra o que acontece quando você indexa além do último token possível na cadeia de caracteres:
SELECT STRTOK('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL |
+----------------------------------------+
Demonstrar como o primeiro elemento pode ultrapassar o final da cadeia de caracteres¶
Neste exemplo, a cadeia de caracteres de entrada está vazia e não há elementos. Sendo assim, o primeiro elemento ultrapassa o final da cadeia de caracteres, e a função retorna NULL em vez de uma cadeia de caracteres vazia:
SELECT STRTOK('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL |
+-------------------+
Chamar STRTOK com um delimitador vazio¶
Aqui está um exemplo com uma cadeia de caracteres delimitadora vazia:
SELECT STRTOK('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b |
+----------------------+
Demonstrar valores NULL para argumentos¶
Os exemplos a seguir especificam valores NULL para cada um dos argumentos:
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 |
+--------------------------+
Demonstrar as diferenças entre STRTOK e SPLIT_PART¶
Este exemplo demonstra a diferença entre STRTOK eSPLIT_PART ao usar delimitadores repetidos. O STRTOK trata cada caractere na cadeia de caracteres do delimitador '|-' como um delimitador separado, dividindo a cada caractere '|' e '-'. Ao contrário, o SPLIT_PART trata a cadeia de caracteres inteira do delimitador '|-' como um único delimitador, portanto, ele só divide onde esta sequência exata aparece:
SELECT STRTOK('data1||data2|-data3---data4', '|-', 1) AS strtok_1,
STRTOK('data1||data2|-data3---data4', '|-', 2) AS strtok_2,
STRTOK('data1||data2|-data3---data4', '|-', 3) AS strtok_3,
STRTOK('data1||data2|-data3---data4', '|-', 4) AS strtok_4,
SPLIT_PART('data1||data2|-data3---data4', '|-', 1) AS split_part_1,
SPLIT_PART('data1||data2|-data3---data4', '|-', 2) AS split_part_2,
SPLIT_PART('data1||data2|-data3---data4', '|-', 3) AS split_part_3;
+----------+----------+----------+----------+-----------------+--------------+--------------+
| STRTOK_1 | STRTOK_2 | STRTOK_3 | STRTOK_4 | SPLIT_PART_1 | SPLIT_PART_2 | SPLIT_PART_3 |
|----------+----------+----------+----------+-----------------+--------------+--------------|
| data1 | data2 | data3 | data4 | data1||data2 | data3---data4| |
+----------+----------+----------+----------+-----------------+--------------+--------------+