MySQL – Funções de manipulação de strings

Olá pessoal, tudo certo? Bem, nesta dica iremos reunir algumas funções do banco de dados MySql. São funções para manipulação de strings. Talvez você já conheça algumas delas, mas objetivo principal é mostrar como elas se comportam para que você possa ter ideia de como utilizá-las para facilitar seu dia-dia com as SELECT’s rotineiras.
Vamos conhecer essas funções então.

 

CONCAT

Sintaxe:
CONCAT (str1, str2, ...)

 

Essa é uma função bem simples de entender. Seu objetivo é unir os valores passados como parâmetros em uma única string. Ela suporta um ou mais valor como parâmetro, não tendo um número máximo. Veja um exemplo:

 

SELECT CONCAT('Th', 'e Clu', 'b ano ', 20, 15)

  • ‘The Club ano 2015’

Os valores numéricos são convertidos para texto no resultado.

Se algum dos valores for nulo o retorno será nulo.

Vamos supor que seja necessário exibir na descrição do produto, além do nome, a unidade de medida. Poderia ser feito da seguinte forma:

 

SELECT CONCAT(P.NOME, ' ', UM.DESCRICAO)
FROM PRODUTOS P
INNER JOIN UNIDADES_MEDIDAS UM ON (UM.ID_UNIDADE_MEDIDA = P.ID_UNIDADE_MEDIDA)

CONCAT_WS

 

Sintaxe:

CONCAT_WS (separator, str1, str2, ...)

 

Essa função funciona de forma semelhante a CONCAT, com o diferencial que ter um separador no primeiro parâmetro. Os demais parâmetros serão as partes a serem concatenadas. Vejamos um exemplo:

 

SELECT CONCAT_WS(', ','Rua das Rosas', 25, 'Centro', 'Cidade', 'UF')

  • ‘Rua das Rosas, 25, Centro, Cidade, UF’

SELECT CONCAT_WS('-','São Paulo', 'SP')

  • ‘São Paulo-SP’

Se houver algum parâmetro nulo o retorno será nulo.

 

LOCATE

Sintaxe:
LOCATE(substr,str), LOCATE(substr,str,pos)

Essa função retorna a posição da primeira ocorrência de SUBSTRING em STR. Na segunda sintaxe a busca inicia-se a partir de POS. Caso não tenha ocorrência de SUBSTR em STR retorna zero. Vejamos um exemplo:

 

SELECT LOCATE('Club', 'The cLUB The cLUB');

  • 5

SELECT LOCATE('Club', 'The cLUB The Club', 8);

  • 14

Note que a função LOCATE não é Case Sensitive, ela não diferencia maiúsculas de minúsculas.
Existem outras funções semelhantes ao LOCATE, são elas: POSITION e INSTR; o que diferencia á a forma de passar os parâmetros, mas o retorno também é a posição da primeira ocorrência de SUBSTR em STR.

 

REVERSE

 

Sintaxe:

REVERSE (str)

 

Retorna a string str com a ordem dos caracteres invertidos. Esta inversão de string pode ser vista na maioria dos sites de downloads; utilizam esta inversão para ocultar a url no link, exemplo:

http://exemplo_down.com.br/?url=/rb.moc.bulceht//:ptth

 

SELECT REVERSE('rb.moc.bulceht//:ptth')

  • ‘http://theclub.com.br’

LENGTH / CHAR_LENGTH

 

Sintaxe:

LENGTH(str) / CHAR_LENGTH(str)

 

Ambas as funções retornam o comprimento de str. A diferença é que LENGTH usa como medida os bytes e CHAR_LENGTH conta cada caracter. Por exemplo, uma string com 5 caracteres de 2 bytes retornará o tamanho 10 para a função LENGTH e 5 para a função CHAR_LENGTH.

 

SELECT CHAR_LENGTH('¬¬º♪♫')

  • 5

SELECT LENGTH('¬¬º♪♫')

  • 12

 

INSERT

sintaxe:

INSERT (str, pos, len, newstr)

 

Essa função retornra a string str com a newstr inserida na posição pos. O parâmetro len indica se os caracteres de str serão substituídos pela newstr. Caso pos não esteja dentro do comprimento de str o retorno é a própria str. Caso len não esteja dentro do comprimento de str os caracteres de str serão substituídos pelos de newstr. Havendo qualquer parâmetro nulo o retorno é nulo. Vejamos alguns exemplos de INSERT:

 

SELECT INSERT('TEXTO RETORNO', 5, 5, '-MEIO-')

  • ‘TEXT-MEIO-ORNO’

SELECT INSERT('TEXTO RETORNO', 5, 0, '-MEIO-')\

  • ‘TEXT-MEIO-O RETORNO’

SELECT INSERT('TEXTO RETORNO', -1, 5, '-MEIO-')

  • ‘TEXTO RETORNO’

SELECT INSERT('TEXTO RETORNO', 5, -1, '-MEIO-')

  • ‘TEXT-MEIO-’

 

STR_CMP

sintaxe:

STRCMP (expr1, expr2)

 

Essa é uma função de comparação, ela baseia-se na oprdem alfanumérica para testar os parãmetros. Seu retorno é 0 caso as expreções sejam iguais, se expr1 for menor que expr2 o retorno é -1, caso contrário o retorno é 1. A função STR_CMP não é Case sensitive, não diferencia caracteres maiúsculos de minúsculos. Vejamos alguns exemplos:

 

SELECT STRCMP('ABC', 'a')

  • 1

SELECT STRCMP('ABC', 'abc')

  • 0

SELECT STRCMP('ABC', 'abd')

  • -1

 

TRIM

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

 

TRIM é uma função bem conhecida por remover o excesso de espaços das strings. No entanto ela é uma função bem dinâmica e pode ser usada para remover outros caracteres das strings. Basicamente seu retorno é a string str com todos os seus prefixos ou sufixos remstr removidos. Ainda pode ser usado um de seus especificadores, BOTH, LEADING e TRAILING, para garantir o retorno desejado. Vamos ver alguns exemplos:

 

SELECT TRIM(BOTH '*' FROM '***********THE CLUB**')

  • ‘THE CLUB’

SELECT TRIM(LEADING '*' FROM '***********THE CLUB**')

  • ‘THE CLUB**’

SELECT TRIM(TRAILING '*' FROM '***********THE CLUB**')

  • ‘***********THE CLUB’

LEFT / RIGTH

 

Sintaxe:

LEFT(str,len) / RIGTH(str,len)

 

LEFT retorna os caracteres mais a esquerda da str partindo da posição 1 até len. RIGTH faz o processo contrário, retornando os caracteres mais a direita de str, partindo da posição final da str decrescendo a quantia len de caracteres.

Vejamos um exemplo:

 

SELECT LEFT('PALMAS-TO', 6)

  • ‘PALMAS’

SELECT RIGHT('PALMAS-TO', 2)

  • ‘TO’

 

LPAD / RPAD

 

Sintaxe:

LPAD(str,len,padstr) / RPAD(str,len,padstr)

 

Essas funções trabalham de forma semelhante. Ambas completam o preenchimento de str com os caractreres de padstr, a diferença é que LPAD completa com padstr para a esquerda e RPAD completa o preenchimento para a direita de str. Se str for maior que len o retorno str é encurtado para o tamanho de len. Os caracteres numéricos são convertidos para texto.

Vejamos alguns exemplos:

 

SELECT LPAD(15, 5, 0)

  • ‘00015’

SELECT LPAD('Texto', 10, '*')

  • ‘*****Texto’

SELECT RPAD('Texto', 10, '?')

  • ‘Texto?????’

SELECT RPAD('Texto', 3, '?')

  • ‘Tex’

SUBSTRING

 

Sintaxe:

SUBSTRING(str,pos), SUBSTRING(str,pos,len),
SUBSTRING(str FROM pos), SUBSTRING(str FROM pos FOR len)

 

SUBSTRING é uma função muito últil quando se precisa extrair um pequeno trecho de uma string. Apesar de ter várias formas de ser utilizada, sua sintaxe é bem simples. Basta ter me mente que o trecho a ser copiada iniciará na posição pos e se len for omitido o retorno da função será a copia da string de pos até o final. Ao informar o valor de lan a string copiada contará de pos até len.

Tem um observação muito interessante sobre esta função. Se você informar um valor negativo para pos, a posição inicial será contada regresivamente do final da string. Vejamos um exemplo de uso para cada sintaxe da SUBSTRING:

 

SELECT SUBSTR('ATÉ ONDE EU POSSO IR?', 3)

  • ‘É ONDE EU POSSO IR?’

SELECT SUBSTR('ATÉ ONDE EU POSSO IR?' FROM 10)

  • ‘EU POSSO IR?’

SELECT SUBSTR('ATÉ ONDE EU POSSO IR?', 5, 8)

  • ‘ONDE EU’

SELECT SUBSTR('ATÉ ONDE EU POSSO IR?', -9)

  • ‘POSSO IR?’

SELECT SUBSTR('ATÉ ONDE EU POSSO IR?', -12, 8)

  • ‘EU POSSO’

SELECT SUBSTR('ATÉ ONDE EU POSSO IR?' FROM -8 FOR 4)

  • ‘OSSO’

É importante ressaltar que a posição inicial para todas as formas de SUBSTRING é 1. Caso seja informado 0 o retorno é uma string vazia.

A função SUBSTR é um sinônimo para a SUBSTRING, funciona de maneira semelhante.

 

Conclusão

 

Bom pessoal, espero que tenham gostado de conhecer um pouco mais o comportamento dessas funções do MySQL. Existem muitas outras funções que podem facilitar nosso trabalho de diversas formas. Podemos tratar de mais algumas funções numa próxima dica.

Um abraço a todos e até a próxima.


Sobre o Autor

Lucas Vieira de Oliveira
Consultor Técnico The Club

E-mail: suporte@theclub.com.br

The Club - O Maior Clube de programadores do Brasil