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 ;

Comentários

  1. 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?

    ResponderExcluir
  2. Olá Mauro
    Para 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

    ResponderExcluir
  3. não esqueçam do "&", um slug para url com este charset é um big fail

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

PHP - Utilizando proxy e CURL para acessar servidores ou sites

MySQL - Cálculo de período de tempo entre duas datas com TIMESTAMPDIFF

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()