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