No MariaDB,
SUBSTRING_INDEX()
é uma função de string embutida. Ele retorna uma substring de uma string antes de um certo número de ocorrências do delimitador especificado. SUBSTRING_INDEX()
requer em três argumentos; a string, o delimitador e a contagem (ou seja, o número de ocorrências desse delimitador). Sintaxe
A sintaxe fica assim:
SUBSTRING_INDEX(str,delim,count)
Onde
str
é a string, delim
é o delimitador e count
é o número de ocorrências desse delimitador a ser usado para determinar a substring a ser retornada. Se
count
for positivo, tudo à esquerda do delimitador final (contando a partir da esquerda) é retornado. Se count
for negativo, tudo à direita do delimitador final (contando a partir da direita) é retornado. Exemplo
Segue um exemplo básico:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3);
Resultado:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3) | +-------------------------------------------------------+ | /users/homer | +-------------------------------------------------------+
Contagem negativa
Especificar um valor negativo para a contagem faz com que ela seja contada para trás a partir do final da string:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3);
Resultado:
+--------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3) | +--------------------------------------------------------+ | homer/docs/cat_vids | +--------------------------------------------------------+
Delimitador não encontrado
Se o delimitador não existir na string, a string inteira é retornada:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3);
Resultado:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3) | +-------------------------------------------------------+ | /users/homer/docs/cat_vids | +-------------------------------------------------------+
Argumentos nulos
Se algum (ou todos) dos argumentos for
null
, o SUBSTRING_INDEX()
função retorna null
:SELECT
SUBSTRING_INDEX(null, '/', 3) AS "1",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', null, 3) AS "2",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', null) AS "3",
SUBSTRING_INDEX(null, null, null) AS "4";
Resultado:
+------+------+------+------+ | 1 | 2 | 3 | 4 | +------+------+------+------+ | NULL | NULL | NULL | NULL | +------+------+------+------+
Argumentos ausentes
Chamando
SUBSTRING_INDEX()
sem passar nenhum argumento resulta em um erro:SELECT SUBSTRING_INDEX();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SUBSTRING_INDEX'