Problema:
Como extrair uma substring de uma string no PostgreSQL/MySQL
Exemplo 1:
Nos
emails tabela, há uma coluna de e-mail. Você gostaria de exibir os primeiros sete caracteres de cada e-mail. A tabela fica assim:
| jake99@gmail.com |
| tamarablack@zoho.com |
| notine@yahoo.fr |
| jessica1995@onet.pl |
Solução 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Outra sintaxe:
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
O resultado é:
| substring | |
|---|---|
| jake99@gmail.com | jake99@ |
| tamarablack@zoho.com | tamarab |
| notine@yahoo.fr | notícia@ |
| jessica1995@onet.pl | Jéssica |
Discussão:
Use o
SUBSTRING() função. O primeiro argumento é a string ou o nome da coluna. O segundo argumento é o índice do caractere no qual a substring deve começar. O terceiro argumento é o comprimento da substring. Atenção! Ao contrário de outras linguagens de programação, os índices começam em 1 , não 0. Isso significa que o primeiro caractere tem índice 1, o segundo caractere tem índice 2, etc.
SUBSTRING(email, 1, 7) retornará as substrings dos valores na coluna de email que começam no início das strings (primeiro caractere) e vão para sete caracteres. A outra notação, SUBSTRING(email FROM 1 FOR 7) , faz exatamente o mesmo. O argumento após o FROM é o índice inicial e o argumento após o FOR é o comprimento da substring. O terceiro argumento do
SUBSTRING() função é opcional. Se você omitir, obterá a substring que começa no índice no segundo argumento e vai até o final da string. SUBSTRING(email, 1) retornará a string inteira, assim como SUBSTRING(email FROM 1) . Exemplo 2:
Você gostaria de exibir a substring entre os índices 2 e 6 (inclusive).
Solução 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Outra sintaxe:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email)) AS substring
FROM emails;
O resultado é:
| substring | |
|---|---|
| jake99@gmail.com | @gmail.com |
| tamarablack@zoho.com | @zoho.com |
| notine@yahoo.fr | @yahoo.fr |
| jessica1995@onet.pl | @onet.pl |
Discussão:
Você usa o
SUBSTRING() funcionam como nos exemplos anteriores. Desta vez, você está procurando por um personagem específico cuja posição pode variar de linha para linha. Para encontrar o índice do caractere específico, você pode usar o POSITION(character IN column) função, onde caractere é o caractere específico no qual você gostaria de iniciar a substring (aqui, @ ). A coluna do argumento é a column do qual você gostaria de recuperar a substring; também pode ser uma string literal. Se você quiser que a substring vá até o final da string original, o terceiro argumento no
SUBSTRING() função (ou a função FOR argumento) não é necessário. Caso contrário, deve ser o comprimento da substring, ou você pode calculá-lo usando o POSITION() função. Você também pode querer recuperar uma substring que não termina no final da string, mas em algum caractere específico, por exemplo, antes de '.'. Aqui está um exemplo:
SELECT
email,
SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
Outra sintaxe:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
O resultado desta consulta é:
| substring | |
|---|---|
| jake99@gmail.com | @gmail |
| tamarablack@zoho.com | @zoho |
| notine@yahoo.fr | @yahoo |
| jessica1995@onet.pl | @onet |
A parte
POSITION('.' IN email) - POSITION('@' IN email) simplesmente calcula o comprimento da substring.