MySQL - Utilizando funções no MySQL - criando slug
Muitas vezes precisamos retirar de um campo de um banco de dados acentos de palavras, pontos e colocar traços no lugar dos espaços. Este formato é comumente chamado de "slug" e possui inúmeras utilidades como parametro de URL, chave de comparação, indice e etc.
É comum também utilizar-se funções externas para gerar o slug mas hoje trago uma solução que pode ser implementada no próprio MySQL. A solução é uma função.
Esta não é a mais elegante versão, pois usa a "força bruta" do REPLACE para cada caractere, mas funciona bem.
delimiter //
CREATE FUNCTION slug(Texto VARCHAR(150))
RETURNS VARCHAR(150)
NOT DETERMINISTIC
BEGIN
DECLARE Resultado VARCHAR(150);
SET Resultado = UPPER(Texto);
SET Resultado = REPLACE(Resultado,' ','-');
SET Resultado = REPLACE(Resultado,'\'','');
SET Resultado = REPLACE(Resultado,'`','');
SET Resultado = REPLACE(Resultado,'.','');
SET Resultado = REPLACE(Resultado,'À','A');
SET Resultado = REPLACE(Resultado,'Á','A');
SET Resultado = REPLACE(Resultado,'Â','A');
SET Resultado = REPLACE(Resultado,'Ã','A');
SET Resultado = REPLACE(Resultado,'Ä','A');
SET Resultado = REPLACE(Resultado,'Å','A');
SET Resultado = REPLACE(Resultado,'È','E');
SET Resultado = REPLACE(Resultado,'É','E');
SET Resultado = REPLACE(Resultado,'Ê','E');
SET Resultado = REPLACE(Resultado,'Ë','E');
SET Resultado = REPLACE(Resultado,'Ì','I');
SET Resultado = REPLACE(Resultado,'Í','I');
SET Resultado = REPLACE(Resultado,'Î','I');
SET Resultado = REPLACE(Resultado,'Ï','I');
SET Resultado = REPLACE(Resultado,'Ò','O');
SET Resultado = REPLACE(Resultado,'Ó','O');
SET Resultado = REPLACE(Resultado,'Ô','O');
SET Resultado = REPLACE(Resultado,'Õ','O');
SET Resultado = REPLACE(Resultado,'Ö','O');
SET Resultado = REPLACE(Resultado,'Ù','U');
SET Resultado = REPLACE(Resultado,'Ú','U');
SET Resultado = REPLACE(Resultado,'Û','U');
SET Resultado = REPLACE(Resultado,'Ü','U');
SET Resultado = REPLACE(Resultado,'Ø','O');
SET Resultado = REPLACE(Resultado,'Æ','A');
SET Resultado = REPLACE(Resultado,'Ð','D');
SET Resultado = REPLACE(Resultado,'Ñ','N');
SET Resultado = REPLACE(Resultado,'Ý','Y');
SET Resultado = REPLACE(Resultado,'Þ','B');
SET Resultado = REPLACE(Resultado,'ß','S');
SET Resultado = REPLACE(Resultado,'Ç','C');
RETURN LOWER(Resultado);
END; //
delimiter ;
Legal seu post Daniel, talvez possa me tirar uma dúvida. Eu sempre uso procedures e quando tentei usar funções não consegui. Uso o Navicat ou o phpmyadmin. Como posso usar exatamente essa sua função num desses editores?
ResponderExcluirOlá Mauro
ResponderExcluirPara criar a função eu utilizo exatamente o código que está no post.
Entro na opção Query do phpmyadmin e coloco lá o código.
A utilização da função pode ser feita da seguinte forma:
SELECT slug(nome_campo) FROM tabela
Abraço
não esqueçam do "&", um slug para url com este charset é um big fail
ResponderExcluir