SQL SUBSTRING, CHARINDEX e PATINDEX: como usar strings e substrings!

O comando SQL SUBSTRING é uma função disponível na linguagem SQL que permite a manipulação de trechos de um campo do tipo texto, ou seja, que contenham strings. Entretanto, existem outras funções que também possibilitam a manipulação de strings e que, inclusive, podem ser utilizadas em conjunto.

Por isso, é importante que as pessoas programadoras entendam como esse recurso funciona. Dessa forma, elas poderão aproveitar ao máximo suas funcionalidades para desenvolver instruções SQL e selecionar dados que atendam à necessidade da aplicação. Para demonstrar como esse recurso funciona, preparamos este post com os seguintes tópicos:

Continue com a gente e boa leitura!

O que é a função SQL SUBSTRING?

Basicamente, a função SQL SUBSTRING é utilizada quando queremos extrair um pequeno trecho de uma string de tamanho maior. Ela pode ser utilizada com os tipos de dados: caractere, binário, texto ou imagem.

Uma das formas de utilizar a função SUBSTRING () é em conjunto com a cláusula SELECT, pois ela indicará em qual parte do campo será feita a seleção. Ela também pode ser usada na cláusula WHERE e, assim, indicar um trecho determinado que fará parte do critério de seleção. 

Qual a sintaxe da função SQL SUBSTRING?

A sintaxe da função SUBSTRING () é:

Sintaxe da função SQL Substring

Em que:

  • expressão: corresponde ao trecho que será pesquisado na string de maior tamanho. Essa expressão pode ser do tipo caractere, binário, imagem ou texto;
  • posição_inicial: indica a partir de qual posição na string maior, o trecho contido na expressão será procurado;
  • tamanho: indica o tamanho da string retornada.

É importante dizer que o tipo de dado retornado pela função SUBSTRING () varia de acordo com o da expressão. Portanto, se a expressão for do tipo texto, o retorno será do tipo varchar. Já se expressão for do tipo image, o retorno será no formato binário.

3 Exemplos de uso da função SQL SUBSTRING

Nada melhor que visualizarmos na prática como esse recurso funciona. Para isso, criaremos uma pequena base de dados necessária para realizarmos o nosso teste. Ela será formada por apenas uma tabela chamada “Aluno”. Confira o script para a criação do banco de dados no MySQL.

Criando banco de dados

1. Retornar a letra inicial de um campo

A função SUBSTRING () pode ser utilizada para retornar apenas a primeira letra de um campo. No código de exemplo a seguir, selecionaremos o campo “nome_pessoa” e a primeira letra do campo “sobrenome_pessoa”. Confira como fica a instrução SQL:

Utilizando SQL SUBSTRING para retornar a letra inicial de um campo

2. Utilizar o SUBSTRING para condicionar a seleção

Como mencionamos, podemos utilizar a função SUBSTRING () com a cláusula WHERE. Vamos realizar a mesma seleção que fizemos no exemplo anterior, só que traremos apenas as pessoas em que a primeira letra do sobrenome seja igual a “S”. Confira a instrução SQL a seguir.

Utilizando a função Substring para condicionar seleção

3. Utilizar o SUBSTRING com uma expressão

O comando SQL SUBSTRING também pode conter uma expressão. No exemplo a seguir, vamos recuperar o DDD dos telefones inseridos no campo “nr_celular” da tabela “Pessoa”. Veja o código SQL:

Utilizando SQL SUBSTRING para uma expressão

Perceba que utilizamos a função CONVERT () dentro da função SUBSTRING (). Dessa forma, conseguimos converter o conteúdo do campo “nr_celular” — que é do tipo bigint (inteiro de tamanho grande) — para caractere (CHAR) e, a seguir, separamos as duas primeiras posições para demonstrar o valor do DDD.

No MySQL a função CONVERT () faz a conversão do conteúdo de um campo da tabela para um determinado tipo de dados, que deve ser informado no segundo parâmetro da função. Vale ressaltar que essa função também funciona no banco de dados SQL Server, mas os parâmetros são invertidos. Portanto, a mesma instrução SQL feita para o SQL Server seria:

Conversão de um campo da tabela pra um determinado tipo de dado

Perceba que a ordem dos parâmetros na função CONVERT () são opostas. Por isso, é importante sempre consultar a documentação oficial do banco de dados utilizados. Dessa forma, é possível garantir que a instrução SQL será realizada sem erros e o resultado será o que realmente esperamos.

Usando as funções SUBSTRING E PATINDEX juntas em SQL!

Com os exemplos mostrados, já podemos perceber como funciona a função SUBSTRING (). Entretanto, ela pode ser utilizada com outras funções. Uma delas é a PATINDEX(). Na prática, ela faz uma busca por um determinado padrão no campo desejado e retorna a posição inicial ao encontrá-lo.

A sintaxe da função PATINDEX () é:

sintaxe patindex ()

Em que:

  • %modelo%: representa a expressão que desejamos encontrar no campo original. Nesse parâmetro podemos utilizar uma expressão com os caracteres curinga “%” e “_”.
  • string_original: indica uma string ou em qual campo da tabela faremos a pesquisa.

Ao encontrar o conteúdo correspondente, a função PATINDEX() retorna a posição inicial da string procurada. Veja um exemplo a seguir.

retornando a posição inicial da string procurada

Agora que demonstramos como a função PATINDEX() funciona, veremos como utilizá-la em conjunto com a função SUBSTRING (). Elas podem ser úteis, por exemplo, para separarmos os componentes do endereço de e-mail, ou seja, para separar o nome da pessoa utilizadora, do domínio correspondente. Veja a instrução SQL abaixo:

separar componentes do endereço de email SQL SUBSTRING

Perceba que na instrução SQL acima utilizamos a função PATINDEX() como um dos parâmetros da função SUBSTRING (). O objetivo foi encontrar a expressão de separação, ou seja, as pessoas que utilizam o domínio de e-mail igual a “gmail”. Ao encontrá-lo, diminuímos um do valor retornado para recuperar a parte correspondente ao nome da pessoa utilizadora.

Já para recuperarmos a parte do domínio, somamos um no valor retornado pela função PATINDEX(). Dessa forma, recuperamos apenas o trecho correspondente após o símbolo de “@”. Além disso, utilizamos a função LEN(), que retorna a quantidade de caracteres em um campo.

Também utilizamos a função PATINDEX() na cláusula WHERE para selecionarmos apenas as pessoas que tenham a expressão correspondente em seu e-mail, pois quando o valor “@gmail” for encontrado, será retornada a posição inicial desse trecho. Se nada fosse achado, o valor retornado será 0. Por isso, utilizamos essa função para comparar esse conteúdo.

É importante dizer que a função PATINDEX() pertence ao banco de dados SQL Server. Portanto, a instrução SQL acima não funciona no MySQL, pois ele não tem essa função. Entretanto, podemos realizar a mesma ação nesse banco de dados, já que ele oferece outras funções que podem ser usadas para esse propósito.

Uma delas é a função INSTR(), que retorna a posição do trecho de uma string encontrado em outra de maior tamanho. Portanto, é uma função que podemos usar para obter o mesmo resultado que a PATINDEX() no nosso exemplo acima.

Outra função que utilizamos é a LENGTH(), que é semelhante à LEN() e serve para retornar a quantidade de caracteres no campo “email”. Confira a instrução SQL para realizarmos o mesmo procedimento que fizemos acima, agora no MySQL:

Retornar a quantidade de caracteres

Boas práticas ao usar a função SQL SUBSTRING

Como mencionamos, a função SUBSTRING () pode ser utilizada de diversas formas e é um excelente recurso para nos ajudar no desenvolvimento de aplicações. Entretanto, ao utilizá-la com expressões e outras funções do banco de dados, é importante conferir a sintaxe de cada uma, pois há diferenças conforme o banco de dados utilizado.

Existem diversas formas de utilizarmos as funções dos bancos de dados. Os exemplos mostrados acima podem ser desenvolvidos com outras funções disponíveis e outra lógica de programação.

Por isso, é importante sempre realizarmos testes ao desenvolvermos instruções SQL para garantir que o resultado será o que esperamos como retorno. Além disso, é preciso evitar expressões e instruções muito complexas e aninhadas, pois elas podem impactar na performance da aplicação.

A função SQL SUBSTRING é um poderoso recurso da linguagem SQL para pesquisar partes de uma string em uma string maior. Sua utilização ajuda a realizar diversas atividades de forma simples e rápida, além de possibilitar o uso com outras funções, como a CONVERT (), PATINDEX(), LEN() e, assim, desenvolver instruções mais precisas e completas para a aplicação. 

Gostou do nosso conteúdo sobre como utilizar o comando SQL SUBSTRING? Então, confira nosso post sobre o que é trigger e como utilizar esse recurso em SQL!