Database
 sql >> Base de Dados >  >> RDS >> Database

Como extrair uma substring de uma string em T-SQL

Problema:


Você tem uma coluna de strings e gostaria de obter substrings delas.

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;

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 no email coluna que começa no primeiro caractere e vai para sete caracteres.

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;

O resultado é:
e-mail substring
[email protected] ake99
[email protected] amar
[email protected] otina
[email protected] essencial

Discussão:


Você usa o SUBSTRING() funciona exatamente como nos exemplos anteriores. Desta vez, o segundo argumento da função é 2 , pois queremos começar no índice 2. O comprimento da substring é 5 (end_index - start_index + 1 ).

Exemplo 3:


Você gostaria de exibir a substring que começa no @ sign e termina no final da string, mas você não sabe os índices ou comprimentos exatos.

Solução 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) 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() funciona exatamente 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 CHARINDEX(character, column) função onde caractere é o caractere específico no qual você gostaria de iniciar a substring (aqui, @ ). A coluna do argumento é a coluna da qual você deseja recuperar a substring; também pode ser uma string literal.

O terceiro argumento do SUBSTRING() função é o comprimento da substring. Você pode calculá-lo usando o CHARINDEX() e o LEN() funções. Você faz isso subtraindo o índice do comprimento da coluna e adicionando 1:
LEN(email) - CHARINDEX('@', email) + 1

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 '. '. Veja como você pode fazer isso:
SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', 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 CHARINDEX('.', email) - CHARINDEX('@', email) simplesmente calcula o comprimento da substring.