Não muito raro precisamos trabalhar algumas informações diretamente em nossa query e hoje aprenderemos a como pegar partes específicas de nossas strings armazenadas no banco de dados com o SUBSTRING de forma simples e descomplicada :).

Objetivo da função substring

O principal objetivo de nossa função subtring é pegar uma parte de específica de determinada STRING, podendo dividir ela, geralmente utilizo com dados que salvo concatenados, permitindo assim ter acesso rápido a informação que preciso. Também pode ser utilizado também quando uma data é salva em um campo VARCHAR, com isso conseguimos manipular o campo da forma que desejamos.

Introdução a função substring

Basicamente precisamos entender que a função substring irá aceitar 3 parâmetros básicos, sendo estes:

  • str – str ou string, é a string que queremos trabalhar
  • start – é aonde iniciaremos nosso trabalho
  • len – len ou length é o tamanho da string que queremos pegar.

A principio é possível trabalhar com substring utilizando apenas os 2 primeiros parâmetros, assim ele entenderá que você deseja pegar uma string de determinado ponto até o final, por exemplo:

SELECT SUBSTRING("O rato roeu a roupa do rei de roma", 8) 

Irá retornar:

"roeu a roupa do rei de roma"

Como podemos observar ele irá começar a contar a partir do 8º carácter até o final da string e irá exibir ao usuário, sendo que o MySQL, diferente do PHP (e outras linguagens C like) começa a contar do 1 e não do 0.

Portanto especificando apenas os 2 primeiros parâmetros conseguimos eliminar o incio de nossa string, agora, caso queira pegar apenas um pedaço da string, devemos especificar o terceiro parâmetro, indicando também, o tamanho que deve ter a string, observe:

SELECT SUBSTRING("O rato roeu a roupa do rei de roma", 8,12) 

Desta forma pegamos a string a partir do 8º carácter e contaremos mais 12 carácteres para sabermos aonde a string terminará, tendo neste caso como resultado:

"roeu a roupa"

Uma forma simples de conseguirmos trabalhar com strings dentro do próprio MySQL

Utilizando SUBSTRING em um UPDATE

Acredito que seja bom lembrar também que é possível trabalhar com substring diretamente me um UPDATE, sendo possível assim reduzir todo o conteúdo de um campo, ou mover parte de um campo para um novo campo, o uso mais comum que eu vejo é quando temos uma data em VARCHAR e queremos passar esta data para um outro campo, DATE, por exemplo, desta forma temos que fazer um UPDATE utilizando SUBSTRING.

Neste exemplo iremos converter nossa data que esta em um campo VARCHAR em formato PT-BR para um campo DATE do MySQL que trabalha com o formato americano:

SELECT CONCAT(SUBSTRING("10/10/2010",7,4), "-",
SUBSTRING("10/10/2010",4,2),"-",
SUBSTRING("10/10/2010",1,2))

Desta forma obteremos como resultado:

2010-10-10 

Assim poderíamos tranquilamente fazer nosso UPDATE:

UPDATE tabela SET CampoData =
CONCAT(SUBSTRING("10/10/2010",7,4), "-",
SUBSTRING("10/10/2010",4,2),"-", SUBSTRING("10/10/2010",1,2))

Ou também podemos utilizar um campo que esteja armazenando esta data, atualizando assim um campo com os dados de outro campo

UPDATE tabela SET CampoData = CONCAT(SUBSTRING(CampoVarchar,7,4),
"-",SUBSTRING(CampoVarchar,4,2),
"-", SUBSTRING(CampoVarchar,1,2))

Da mesma forma também é possível utilizar o campo SUBSTRING  um INSERT, conforme a usa necessidade.

Utilizando o SUBSTRING para ordenar uma consulta

Também é possível ordernar uma consulta com o substring de forma bem simples, podendo reordenar uma string ou até mesmo utilizar apenas parte dela para conseguir a ordem adequada na hora da ordenação, veja o exemplo abaixo:

SELECT CampoData 
FROM tabela 
ORDER BY 
    CONCAT( 
         SUBSTRING(CampoData,7,4)
         , SUBSTRING(CampoData,4,2)
         , SUBSTRING(CampoData,1,2) 
    )

Com isso ordenamos nosso registro por data, sem ter todo o trabalho de alterar o tipo de campo.

Dúvidas? problemas? Poste nos nossos comentários :)


10 Comments

  1. Posted 22 de setembro de 2012 at 15:40 | Permalink

    Estou com uma dúvida sobre o uso da SUBSTRING.
    Preciso selcionar um trecho do texto, antes e depois da palavra pesquisada na busca.
    Já pesquisei bastante no Google, mas não achei nada que retornasse o que desejo.
    Seria algo assim:
    SELECT … (não consegui chegar a um Select ainda)
    Retorna
    …(-200 caracteres) $palavra (+200 caracteres)…

    Tem alguma idéia?

    Abraço!

    • Posted 24 de outubro de 2012 at 11:27 | Permalink

      Para isso você vai precisar de 2 ou 3 funções, REPLACE, SUBSTRING e LOCATE, vai dar um certro trabalho, talvez seja mais fácil você fazer na programação do que no MySQL.

      Abraços

  2. Posted 22 de setembro de 2012 at 15:40 | Permalink

    Estou com uma dúvida sobre o uso da SUBSTRING.
    Preciso selcionar um trecho do texto, antes e depois da palavra pesquisada na busca.
    Já pesquisei bastante no Google, mas não achei nada que retornasse o que desejo.
    Seria algo assim:
    SELECT … (não consegui chegar a um Select ainda)
    Retorna
    …(-200 caracteres) $palavra (+200 caracteres)…

    Tem alguma idéia?

    Abraço!

    • Posted 24 de outubro de 2012 at 11:27 | Permalink

      Para isso você vai precisar de 2 ou 3 funções, REPLACE, SUBSTRING e LOCATE, vai dar um certro trabalho, talvez seja mais fácil você fazer na programação do que no MySQL.

      Abraços

  3. Giovane
    Posted 13 de dezembro de 2012 at 15:59 | Permalink

    Amigão como poderia pegar dados de uma determinada String separadas por pontos, por exemplo:

    Ex: (125518.62.24), queria pegar todos os numeros da esquerda, conforme exemplo eu iria pegar o 125518, e também num outro select tirar os da direita(24), pode me ajudar?

  4. Giovane
    Posted 13 de dezembro de 2012 at 15:59 | Permalink

    Amigão como poderia pegar dados de uma determinada String separadas por pontos, por exemplo:

    Ex: (125518.62.24), queria pegar todos os numeros da esquerda, conforme exemplo eu iria pegar o 125518, e também num outro select tirar os da direita(24), pode me ajudar?

  5. Posted 21 de dezembro de 2012 at 17:24 | Permalink

    Valeu pela dica…
    Abs!

  6. Posted 21 de dezembro de 2012 at 17:24 | Permalink

    Valeu pela dica…
    Abs!

  7. Pedro
    Posted 11 de julho de 2013 at 10:10 | Permalink

    Oi queria saber como eu faço uma pesquisar no MYSQL:

    eu tenho um campo chamado DataNascimento, ele é um varchar , exemplo (12/05/1999), como eu conseguiria por pesquisa, selecionar, só datas = 2013 ? a penas os 4 ultimos campos que seria o ano.

    Aguardando resposta! Obrigado!

  8. Pedro
    Posted 11 de julho de 2013 at 10:10 | Permalink

    Oi queria saber como eu faço uma pesquisar no MYSQL:

    eu tenho um campo chamado DataNascimento, ele é um varchar , exemplo (12/05/1999), como eu conseguiria por pesquisa, selecionar, só datas = 2013 ? a penas os 4 ultimos campos que seria o ano.

    Aguardando resposta! Obrigado!

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>