No MariaDB, você pode usar o
SUBSTRING_INDEX()
função para retornar tudo antes ou depois de um determinado caractere (ou caracteres) em uma string. Esta função aceita três argumentos; a string, o delimitador e o número de ocorrências desse delimitador a ser usado para determinar a substring a ser retornada.
Exemplos
Podemos ver como a função funciona nos exemplos a seguir.
Selecionar tudo antes
Para selecionar tudo antes de um determinado caractere, faça do terceiro argumento um valor positivo:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 2);
Resultado:
Red,Green
Neste exemplo, selecionamos tudo antes da segunda vírgula. Isso é feito usando uma vírgula (
,
) como delimitador e 2
como a contagem. Eu usei uma vírgula nesse exemplo, mas poderia ter sido qualquer caractere ou string:
SELECT SUBSTRING_INDEX('Red or Green or Blue', ' or ', 2);
Resultado:
Red or Green
Selecionar tudo depois
Use um valor negativo para selecionar tudo depois de um determinado caractere:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', -2);
Resultado:
Green,Blue
Observe que o valor negativo significa que ele contará a partir da direita e, em seguida, selecione a substring à direita do delimitador.
Quando o delimitador não é encontrado
Se o delimitador não for encontrado na string, a string será retornada por completo.
Exemplo:
SELECT SUBSTRING_INDEX('Red,Green,Blue', '-', 1);
Resultado:
Red,Green,Blue
Neste caso, a string inteira é retornada por completo porque usamos um hífen (
-
) como delimitador, mas não havia hífens na string. Teríamos o mesmo resultado se a string não contém o delimitador, mas nosso
count
excede o número de delimitadores na string. Exemplo:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 10);
Resultado:
Red,Green,Blue
Sensibilidade a maiúsculas e minúsculas
O
SUBSTRING_INDEX()
A função executa uma pesquisa com distinção entre maiúsculas e minúsculas para o delimitador. Ou seja, o delimitador precisa ser o caso correto antes de corresponder. Caso incorreto
Aqui está um exemplo em que o caso não corresponde:
SELECT SUBSTRING_INDEX('Red and green and blue', 'AND', 2);
Resultado:
Red and green and blue
Obtemos toda a cadeia na íntegra.
Caso correto
Agora, aqui está o mesmo exemplo, mas onde o caso corresponde:
SELECT SUBSTRING_INDEX('Red and green and blue', 'and', 2);
Resultado:
Red and green