Tenho visto muita gente lendo os dados do MySQL, criando uma matriz (array) ou tupla (recordset) dentro da linguagem de programação, para só então, utilizar-se das funções para tratamento de caracteres disponíveis nesta linguagem. Quem tiver usando C puro, tá morto né 🙂
Pois bem, vamos rever algumas funções de caracteres implementadas dentro do MySQL que podem ser uma mão-na-roda para todo desenvolvedor, muitas delas, indisponíveis em algumas linguagens:
CHAR: Retorna um caracter contido dentro da tabela ASCII, conforme valor informado. Para quem não conhece, existe uma tabela numerada de 1 a 255, uma matriz, que determina todos os caracteres válidos. Por exemplo A = 65, B = 66, e assim por diante.
mysql> SELECT CHAR(65);
A
mysql> SELECT CHAR(65,76,69,88);
ALEX
CHAR_LENGTH: Retorna a quantidade de caracteres de uma string.
mysql> SELECT CHAR_LENGTH(‘Melissa’);
7
CONCAT: Concatena várias sequências de caracteres (strings), numa só:
mysql> SET @nome_do_usuario = ‘Vinicius’;
mysql> SELECT CONCAT(‘Bom Dia ‘, @nome_do_usuario, ‘, ‘, ‘como você vai?’);
Bom Dia Vinicius, como você vai?
CONCAT_WS: Semelhante à CONCAT, contudo, a primeira sequência de caracteres é permeada, repetida, dentre as demais strings.
mysql> SELECT CONCAT_WS(‘/’, ’31’, ’12’, ‘2012’);
31/12/2012
mysql> SELECT CONCAT_WS(‘-‘,’cod’,’prod’,’001′);
cod-prod-001
INSTR: Busca a ocorrência de uma substring dentro de uma string. Retorna zero se não encontrou nada, e, a posição inicial (dentro da string) caso encontre uma equivalência.
mysql> SELECT INSTR(‘Impressora HP Deskjet D1560’, ‘D1561’);
0
mysql> SELECT INSTR(‘Impressora HP Deskjet D1560’, ‘D1560’);
9
mysql> SELECT CHAR_LENGTH(CONVERT(‘São Paulo’ USING LATIN1));
9
CONVERT(‘STRING’ USING <CHARSET>), basicamente, este é o uso da função CONVERT que escreverei um POST dedicado à CHARSET e CONVERT. “O proféssor (com é) tá ficando véio’. Falando de LENGTH deu exemplo de CHAR_LENGTH. Não, pequeno gafanhoto, o intuito aqui é demonstrar que CHAR_LENGTH retorna a quantidade de caracteres, independente, da CHARSET em uso.
Agora sim, vamos ao LENGTH:
mysql>
SELECT LENGTH(CONVERT(‘São Paulo’ USING LATIN1));
9
mysql> SELECT LENGTH(CONVERT(‘São Paulo’ USING UTF8));
10
LPAD/RPAD: Preenche com caracteres à esquerda (LPAD) ou à direita (RPAD) até o tamanho limite estabelecido:
mysql> SELECT LPAD(‘500′,6,’0’);
000500
Onde ‘500’ é a string, 6 é o tamanho limite de caracteres, e ‘0’ o caractere que deve ser utilizado para preenchimento.
mysql> SELECT RPAD(‘ALE’,9,’?’);
ALE??????
LTRIM/TRIM/RTRIM: Removedor de espaços. (L) à esquerda, (R) à direita, enquanto TRIM remove todos os espaços à esquerda e à direita, porém, jamais espaços entre caracteres.
mysql> SELECT LTRIM(‘ Rio de Janeiro’);
Rio de Janeiro
mysql> SELECT RTRIM(‘Rio de Janeiro ‘);
Rio de Janeiro
mysql> SELECT CONCAT(‘[‘, TRIM(‘ Rio de Janeiro ‘), ‘]’);
[Rio de Janeiro]
MID/SUBSTRING/SUBSTR: Permite extrair trechos de uma sequência de caracteres.
mysql> SELECT MID(‘Rio de Janeiro’, 5, 2);
de
Onde ‘Rio de Janeiro’ é a string, 5 é a primeira posição dentro da string (iniciando a partir de 1), e, 2 posições (caracteres) devem ser extraídos.
mysql> SELECT SUBSTRING(‘MySQL é o melhor banco de dados’, 11, 6);
melhor
REPEAT: Simplesmente, repete N vezes um determinado caracter, ou sequência de caracteres:
SELECT REPEAT(‘*’, 10);
**********
SELECT REPEAT(‘Sim ‘, 3);
Sim Sim Sim
REPLACE: Troca um caractere ou sequência dentro de uma string.
mysql> SELECT REPLACE(‘www.mysql.com’, ‘.com’, ‘.com.br’);
www.mysql.com.br
Onde ‘www.mysql.com’ é a string a ser modificada, ‘.com’ o que dever ser procurado e substituído por ‘.com.br’.
RIGHT: Retorna os N caracteres mais à direta de uma string.
mysql> SELECT RIGHT(‘ALEXANDRE’,5);
ANDRE
UCASE/UPPER: Transforma minúsculas em maiúsculas.
mysql> SELECT UCASE(‘melissa’);
MELISSA
mysql> SELECT UPPER(‘théo’);
THÉO
mysql> SELECT UCASE(‘corinthians’);
SÃO PAULO FUTEBOL CLUBE 😉
REVERSE: Reverte, inverte uma string.
mysql> SELECT REVERSE(‘1234’);
4321
Pessoal, basicamente, aqui estão listadas 90% das funções de manipulação de strings do MySQL. Obviamente, todas elas podem ser encapsuladas umas dentro das outras, sem qualquer distinção. Funções de manipulação de strings são especialmente úteis dentro de comandos SQL do tipo DML, tais como: INSERT, UPDATE, DELETE, REPLACE e sobretudo nos SELECT’s. Todas estas funções podem ser utilizadas na criação de programas embarcados no MySQL, conhecidos como PROCS ou STORED ROUTINES, tais como: eventos (events), funções (functions), rotinas (procedures) e gatilhos (triggers).
Ótimo post!
Bem legal, a gente trabalha o tempo todo com isso mas as vezes bate um branco! entrei aqui procurando uma versão do str_pad do PHP(no mysql lpad, me refrescou a memoria! ) e acabei aprendendo sobre o char_length que embora nunca tenha passado por nenhum problema sobre isso, se um dia pintar ja sei como resolver!!
tks!
Obrigado pelo post Alexandre. Foi útil.
Brigadão. Ajudou bastante.
como faço para fazer uma consulto e retornar um numero x de caracteres, como por exemplo, eu tenho um noticia, mas não quero exibir ela toda no resultado da consulta, so uma parte dela, uns 30 caracteres, tem alguma função para isso?
Leandro, faça assim:
SELECT LEFT(sua_coluna_de_noticia, 30) FROM tabela_de_noticias WHERE
Abs,
mysql> SELECT UCASE(‘corinthians’);
SÃO PAULO FUTEBOL CLUBE => está foi a melhor de todas…
Gostei muito do post!
Gostaria de saber se vc poderia me dá uma força.
tenho 2 campos de de data um dataInicial e outro DataFinal porem no banco está como varchar a data como faria para pegar um intervalo das datas de forma correta já que o campo de data está como varchar.
coleque data como datetime em vez de varchar e compare as 2 normalmente
Excelente posr em alexandremalmeida, parabéns!
Muito bom o post.
Mas tenho uma dúvida. Tenho registros assim 01/001, 01-1/001, 15-2/099, onde o que vem antes da barra (ex: 01) é uma informação. Como faço para selecionar somente o que vem antes da barra?
Select Substring_Index(nome_da_coluna,’/’,1) from tabela;
I could not refrain from commenting. Well written!
Bacana amigo, podia fazer a mesma coisa pra JS e PHP, que tal?
JS e PHP não é minha praia 🙁
Ajudou demais ….
Vou deixar de tratar string via PHP … valeu !
TOP demais! Parabéns pelo POST e pela didática! Exemplos muito claros! Grande abraço!