18:42 0 4
Eliminar acentos y caracteres especiales en SQL (TRANSLATE)

Eliminar acentos y caracteres especiales en SQL (TRANSLATE)

  DrUalcman |  mayo 62018

Como siempre mis publicaciones son siempre cuando he tenido la necesidad de hacer algo, en esta ocasión de eliminar de una cadena de texto los acentos y caracteres especiales, además de los espacios en blanco.

Buscando por Internet a ver si encontraba alguna función de SQL que me hiciera el trabajo por mí, que imaginaba sería mas eficiente que hacer lo yo. Encontré que en los sistemas de ORACLE existe una una manera sencilla de hacerlo a través de la función TRANSLATE:

select TRANSLATE(COLUMNA_TABLA, 
      'ñáéíóúàèìòùãõâêîôôäëïöüçÑÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜÇ ', 
      'naeiouaeiouaoaeiooaeioucNAEIOUAEIOUAOAEIOOAEIOUC_') nombre
from TABLA;

Pero resulta que MS-SQL no dispone de una función parecida. Por lo que me ha tocado escribir una función que realice esta tarea, y como es norma en mi os la comparto para que todos podamos disfrutar de ella, y para que la critiquen o la mejoren si alguno ve como mejorarla.

CREATE FUNCTION LimpiarCaracteres ( @Cadena VARCHAR(MAX) )
RETURNS VARCHAR(MAX)
AS 
BEGIN
-- ============================================================
-- Author: < Sergi Ortiz >
-- Create date: < 06 Jul 2018 >
-- Description: < Función que cambia las vocales con tilde 
-- y caracteres especiales >
-- Retorno: < Devuelve los mismos caracteres sin acentos >
-- ============================================================
 --Reemplazamos las vocales acentuadas y caracteres especiales
 -- áéíóúàèìòùãõâêîôûäëïöüñÑçÇ ÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜ 
    RETURN
REPLACE(REPLACE( /*vocales ÃÕ*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales ÄËÏÖÜ*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales ÂÊÎÔÛ*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales ÀÈÌÒÙ*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales ÁÉÍÓÚ*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales ñÑçÇ  incluido espacio en blanco*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales äëïöü*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales âêîôû*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales àèìòù*/
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( /*vocales áéíóú*/ @Cadena, 'á', 'a'), 'é','e'), 'í', 'i'), 'ó', 'o'), 'ú','u')
,'à','a'),'è','e'),'ì','i'),'ò','o'),'ù','u')
,'â','a'),'ê','e'),'î','i'),'ô','o'),'û','u')
,'ä','a'),'ë','e'),'ï','i'),'ö','o'),'ü','u')
,'ñ','n'),'Ñ','N'),'ç','c'),'Ç','C'),' ','')
,'Á','A'),'É','E'),'Í','I'),'Ó','O'),'Ú','U') 
,'À','A'),'È','E'),'Ì','I'),'Ò','O'),'Ù','U') 
,'Â','A'),'Ê','E'),'Î','I'),'Ô','O'),'Û','U')
,'Ä','A'),'Ë','E'),'Ï','I'),'Ö','O'),'Ü','U') 
,'Ã','A'),'Õ','O')  
END

Para utilizar la función hacerlo de esta manera

SELECT  [dbo].[LimpiarCaracteres]('Paéz').

Happy codding

#SQL

4 Comentarios

    • Penerto Vagi Nales
      jueves, 29 de septiembre de 2022 12:02

      Muchas gracias. Me funcionó perfecto.

    • Tavo
      martes, 23 de agosto de 2022 10:06

      Sos crack, por gente como vos sigo creyendo en este fucking mundo.

    • AC
      jueves, 1 de julio de 2021 2:04

      Excelente aporte

    • Fernando
      miércoles, 18 de diciembre de 2019 15:43

      gracias, funciona muy bien!!!!

 
 
 

Archivo