Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como extrair uma substring de uma string no PostgreSQL/MySQL

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:
e-mail
[email protected]
[email protected]
[email protected]
[email protected]

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 é:
e-mail substring
[email protected] jake99@
[email protected] tamarab
[email protected] notícia@
[email protected] 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 é:
e-mail substring
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @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 é:
e-mail substring
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

A parte POSITION('.' IN email) - POSITION('@' IN email) simplesmente calcula o comprimento da substring.