Problema:
Você deseja extrair uma substring do texto em uma determinada coluna.
Exemplo:
Nosso banco de dados tem uma tabela chamada
web_address
com dados nas colunas id
e address
. Queremos remover o 'www.
' no início e o '.com
' no final de cada address
. id | endereço |
---|---|
1 | www.exemplo.com |
2 | www.google.com |
3 | www.learnsql.com |
Solução 1:
Para remover os primeiros 4 caracteres:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Para remover os últimos 4 caracteres:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Para remover os primeiros 4 caracteres e os últimos 4 caracteres:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Solução 2:
Para remover os primeiros 4 caracteres:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Para remover os últimos 4 caracteres:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Para remover os primeiros 4 caracteres e os últimos 4 caracteres:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Solução 3:
Para remover todos os caracteres antes do segundo '.' da direita:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
Para remover todos os caracteres após o segundo '.' da esquerda:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
Para remover todos os caracteres após o segundo '.' da esquerda, remova todos os caracteres antes do primeiro '.' da direita:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
O resultado é:
substring |
---|
exemplo |
aprendersql |
Discussão:
A primeira e a segunda soluções removem um número especificado de caracteres do texto com o
SUBSTR()
ou SUBSTRING()
função. SUBSTR()
é um sinônimo para SUBSTRING()
. Ambos requerem a string e a posição inicial como argumentos. O último argumento, que define o número de caracteres a serem extraídos, é opcional. Se o último argumento for omitido, a string inteira (do ponto inicial) será retornada. Na terceira solução, o
SUBSTRING_INDEX()
A função remove o texto antes ou depois dos caracteres especificados. Requer como argumentos a string, o caractere e quantas instâncias do caractere devem ser encontradas até o início da extração de texto.