Substring() no SQL Server: Como usar com exemplos

⚡ Resumo Inteligente

SUBSTRING() no SQL Server extracts é uma porção de um caractere, texto ou expressão binária, retornando um número definido de caracteres a partir de uma posição inicial escolhida, e combina naturalmente com CHARINDEX para análise baseada em delimitadores.

  • ✂️ Objetivo: A função SUBSTRING() retorna uma porção específica de uma string, dadas a expressão de origem, uma posição inicial e um comprimento.
  • 🔢 Três argumentos: A expressão, a posição inicial e o comprimento total são todos obrigatórios na função SUBSTRING() do SQL Server.
  • 📍 Índice baseado em um: A posição inicial é baseada em 1, portanto o primeiro caractere conta como posição um, o que evita erros de deslocamento por uma unidade.
  • 🔎 Com CHARINDEX: A combinação de SUBSTRING() com CHARINDEX() localiza um delimitador e extracé o texto antes ou depois dele.
  • ↔️ Versus ESQUERDA e DIREITA: Ao contrário de LEFT() e RIGHT(), SUBSTRING() extracts caracteres de qualquer posição, não apenas das extremidades.
  • ⚠️ Casos extremos: Um comprimento NULL retorna NULL, enquanto um comprimento maior que a string retorna o restante sem gerar um erro.

Função SUBSTRING() no SQL Server com exemplos em T-SQL

O que é Substring()?

SUBSTRING() é uma função em SQL que permite ao usuário extrair uma substring de qualquer string fornecida, conforme necessário. Exemplo: SUBSTRING()tracA função SUBSTRING() em SQL retorna uma parte específica de uma string de comprimento especificado, a partir de uma determinada posição em uma string de entrada.

Sintaxe para Substring()

SUBSTRING(Expression, Starting Position, Total Length)

Aqui:

  • A expressão SUBSTRING() em SQL Server Pode ser qualquer caractere, binário, texto ou imagem. A expressão é a string de origem da qual a substring é obtida.
  • A posição inicial determina a posição na expressão a partir da qual a nova substring deve começar.
  • O Comprimento Total é o comprimento total esperado da subcadeia resultante da Expressão, a partir da Posição Inicial.

Regras para usar SUBSTRING()

  • Os três argumentos são obrigatórios na função SUBSTRING() do MS SQL.
  • Se a posição inicial for maior que o número máximo de caracteres na expressão, a função SUBSTRING() do SQL Server não retornará nada.
  • O comprimento total pode exceder o comprimento máximo de caracteres da string original. Nesse caso, a substring resultante será a string inteira, começando na posição inicial da expressão até o último caractere da expressão.

O diagrama abaixo ilustra o uso da função SUBSTRING() no SQL Server:

Diagrama mostrando como SUBSTRING() extraccaracteres ts a partir de uma posição inicial por um determinado comprimento

Exemplos de substring T-SQL

Pressuposto: Suponha que temos uma tabela chamada 'Guru99' com duas colunas e quatro linhas, conforme mostrado abaixo. Usaremos este 'GuruTabela 99' nos exemplos a seguir:

GuruTabela de exemplo 99 com as colunas Tutorial_ID e Tutorial_name usadas nos exemplos de SUBSTRING.

Consulta 1: SUBSTRING() em SQL com um comprimento menor que o comprimento máximo total da expressão.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

Resultado: O diagrama abaixo exibe a substring da coluna 'Tutorial_name' como a coluna 'SUB'. A posição inicial é 1 e o comprimento é 2, portanto, os dois primeiros caracteres são retornados:

Grade de resultados retornando os dois primeiros caracteres de Tutorial_name como a coluna SUB.

Consulta 2: SUBSTRING() no SQL Server com um comprimento maior que o comprimento máximo total da expressão.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

Resultado: O diagrama abaixo exibe a substring da coluna 'Tutorial_name' como a coluna 'SUB'. Mesmo que o comprimento da substring seja maior que o comprimento máximo total da expressão, nenhum erro é gerado e a consulta retorna a string completa a partir da posição inicial:

Grade de resultados retornando o restante de Tutorial_name quando o comprimento solicitado excede a string.

SUBSTRING com CHARINDEX no SQL Server

Um uso muito comum da função SUBSTRING() no mundo real é para extrairtracO texto que se encontra antes ou depois de um delimitador, como o domínio em um endereço de e-mail. Por si só, a função SUBSTRING() precisa de uma posição inicial fixa, mas a posição de um delimitador varia de linha para linha. A função CHARINDEX() resolve isso retornando a posição de um caractere dentro de uma string:

CHARINDEX(substring_to_find, expression [, start_location])

Ao aninhar CHARINDEX() dentro de SUBSTRING(), a posição inicial torna-se dinâmica. O exemplo abaixo encontra o @ símbolo e retorna tudo o que vem depois dele. Um variável Contém o valor da amostra:

DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com';
SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;

Aqui, CHARINDEX('@', @Email) localiza a posição do símbolo @, adicionando 1 move-se para a frente e SUBSTRING() então extracts os caracteres restantes. Para o valor acima, a consulta retorna o domínio. guru99. comEsse padrão CHARINDEX mais SUBSTRING é a maneira padrão de analisar strings estruturadas em T-SQL.

SUBSTRING vs LEFT e RIGHT no SQL Server

O SQL Server também fornece as funções LEFT() e RIGHT() para extrair caracteres do início ou do fim de uma string. Elas são mais curtas de escrever, mas estão limitadas às duas extremidades. SUBSTRING() é a mais flexível, pois pode começar em qualquer posição. A tabela abaixo compara as duas funções:

função Argumentos Extracts de SUBSTRING() equivalente
ESQUERDA(expressão, n) 2 Início da corda SUBSTRING(expressão, 1, n)
DIREITA(expressão, n) 2 Fim da string SUBSTRING(expressão, LEN(expressão) – n + 1, n)
SUBSTRING(expressão, início, comprimento) 3 Qualquer posição Não aplicável

Resumindo, LEFT() e RIGHT() são atalhos convenientes para as extremidades de uma string, enquanto SUBSTRING() lida com o caso geral, incluindo caracteres retirados do meio.

Argumentos negativos, zero e nulos em SUBSTRING

Além das regras básicas, é útil saber como a função SUBSTRING() se comporta nas extremidades. Quando a posição inicial é zero ou negativa, o SQL Server calcula um comprimento efetivo de (início + comprimento – 1) e começa a ler a partir da posição um. Quando qualquer argumento é NULL, o resultado também é NULL. A tabela abaixo foi verificada em relação à tabela oficial. SUBSTRING (Transact-SQL) A referência mostra estes casos:

Ligar Resultado Razão
SUBSTRING('Guru99', 1, 4) Guru Chamada normal: quatro caracteres a partir da posição um.
SUBSTRING('Guru99', 0, 3) Gu Começando abaixo de um: o comprimento efetivo é 0 + 3 – 1 = 2.
SUBSTRING('Guru99', 4, 100) u99 Se o comprimento da string for maior que o valor retornado, o retorno é exibido sem erro.
SUBSTRING('Guru99', 3, NULO) NULL Um argumento NULL torna todo o resultado NULL.

Conhecer esses casos extremos evita surpresas quando a posição inicial é calculada a partir de outra coluna ou de um variável que pode ser zero ou NULL.

Perguntas Frequentes

O SQL Server usa SUBSTRING(); SUBSTR() é o nome usado em Oracle e MySQLAmbas retornam uma parte de uma string, mas SUBSTRING() é a função padrão do Transact-SQL, portanto SUBSTR() não será executada no SQL Server.

Sim. Como SUBSTRING() retorna um valor, ele pode aparecer nas cláusulas WHERE, SELECT e ORDER BY. Filtrar com base em SUBSTRING() geralmente evita a busca por índice, portanto, um padrão LIKE costuma ser mais rápido para pesquisas por prefixo.

Sim, mas o SQL Server primeiro converte o valor em uma string, seja implicitamente ou por meio de CAST ou CONVERT. A posição inicial e o comprimento contam os caracteres, não os dígitos ou partes de data, portanto, formate o valor com cuidado.

A forma com três argumentos comporta-se de maneira semelhante, mas os detalhes diferem. MySQL Também permite SUBSTR() e posições iniciais negativas, enquanto o SQL Server usa SUBSTRING() e trata um início abaixo de um usando uma regra de comprimento efetivo.

A função SUBSTRING() retorna a mesma categoria da sua entrada: varchar para dados de caracteres, nvarchar para texto Unicode e varbinary para expressões binárias. O comprimento depende da substring solicitada, não da coluna de origem inteira.

Embrulheping Uma coluna em SUBSTRING() dentro de uma cláusula WHERE torna o predicado não otimizável para busca em índices (non-sargable), portanto o SQL Server não pode usar uma busca em índice nessa coluna. Para correspondências de prefixo, um padrão LIKE 'valor%' geralmente tem melhor desempenho.

Sim. Travas deslizantes portáteis Copiloto do GitHub É possível criar expressões SUBSTRING() e CHARINDEX(), incluindo análise sintática baseada em delimitadores, a partir de um prompt em linguagem natural. Sempre verifique a posição inicial, o comprimento e a indexação baseada em 1 antes de executar a consulta.

Assistentes de IA e aprendizado de máquina traduzem regras em inglês simples para combinações de SUBSTRING(), CHARINDEX(), LEFT() e RIGHT(), sugerem cálculos de comprimento e sinalizam erros de um caractere. O desenvolvedor revisa cada sugestão para verificar sua correção antes de implementá-la.

Resuma esta postagem com: