Augusto Humire Martinez web blog

algo de web-in

Trim de cualquier caracter en SQL Server

Cualquier momento, cualquier lugar y cualquier circunstancia, siempre se aprende algo.

El uso de la funcion nativa de LTRIM (Left) o RTRIM (Right)  ha sido muy usada hasta ahora, y como sabras la funcion devuelve una cadena que contiene una copia de una cadena dada sin espacios iniciales (LTrim), sin espacios finales (RTrim) o sin espacios iniciales ni finales (Trim).

RTRIM(‘abcde      ‘)
retorna:   ‘abcde’

o

LTRIM(‘abcde      ‘)
retorna:   ‘abcde’

Pero como eliminarias un caracter determinado que se encuentra a la derecha o a la izquierda en SQL server?,  las soluciones podrian ser diversas sin embargo aqui les traigo lo que he usado.

…sencillo, crearemos una funcion propia que lo hace.

La siguiente funcion retira cualquier tipo de caracter de la izquierda, claro que se tiene que especificar cual es el caracter que se tiene que limpiar.

CREATE FUNCTION [dbo].[fn_CharLTrim]
(
@char CHAR(1)
, @cadena nvarchar(255)
)
RETURNS nvarchar(20)
AS
BEGIN
DECLARE @posicion INTEGER
SELECT @posicion = PATINDEX(‘[‘ + @char + ‘]%’, @cadena)
WHILE @posicion > 0
BEGIN
SELECT @cadena = STUFF(@cadena, @posicion, 1, ”)
SELECT @posicion = PATINDEX(‘[‘ + @char + ‘]%’, @cadena)
END
RETURN @cadena
END

Ejemplo

SELECT [dbo].fn_fn_CharLTrim(‘0′,’0000210215-152’)

nos devuelve

210215-152

Entonces hemos retirado un caracter de la izquierda, puede ser cualquiera que se necesite

La siguiente funcion retira cualquier tipo de caracter de la derecha, de la misma forma se tiene que especificar cual es el caracter que se tiene que limpiar.

Entonces para balancear el tema haremos el Trim pero de la derecha

CREATE FUNCTION [dbo].[fn_CharRTrim]
(
@char CHAR(1)
, @cadena nvarchar(255)
)
RETURNS nvarchar(20)
AS
BEGIN
DECLARE @posicion INTEGER
SELECT @posicion = PATINDEX(‘%[‘ + @char + ‘]’, @cadena)
WHILE @posicion > 0
BEGIN
SELECT @cadena = STUFF(@cadena, @posicion, 1, ”)
SELECT @posicion = PATINDEX(‘%[‘ + @char + ‘]’, @cadena)
END
RETURN @cadena
END

Ejemplo

SELECT [dbo].fn_CharRTrim(‘x’,’2541-2010xxxxxxxxxxx’)

nos devuelve

2541-2010

Y ahora biene lo mejor, tambien la pregunta era y como se puede quitar caracteres extraños de una cadena dejando solamente numeros y letras, quitando cualquier tipo de caracter que no sea letra o numero?, pues la solucion es similar, pero la pregutna podria ser y cuando necesitare retirar caracteres dentro? pues en mi caso toco almacenar numeros telefonicos y como sabras el almancenamiento de los telefonos es variado, y esta sujeto a que el usuario coloque el formato que el usuario establesca como parametro, mejor veamos primero la funcion y luego el ejemplo

ALTER FUNCTION [dbo].[fn_TrimInto]
(
@cadena nvarchar(255)
)
RETURNS nvarchar(20)
AS
BEGIN
DECLARE @posicion INTEGER
SELECT @posicion = PATINDEX(‘%[^a-zA-Z0-9_]%’, @cadena)
WHILE @posicion > 0
BEGIN
SELECT @cadena = STUFF(@cadena, @posicion, 1, ”)
SELECT @posicion = PATINDEX(‘%[^a-zA-Z0-9_]%’, @cadena)
END
RETURN @cadena
END

Ejemplo

SELECT [dbo].fn_Commit_TrimInto(‘+51-(054)-215739’)

nos devuelve

51054215739

Entonces como vez, hemos retirado cualquier caracter extraño de una cadena, usando expresiones regulares, el uso de expresiones regulares es una gran herramienta, dejando tan solo los caracteres que nos interesan.

En resumen la extension de TRIM puede ser muy diversa, espero les sirva esto asi como a mi me sirve cada solucion que encuentro.

Este post no pretende ser un manual sobre el uso de las funciones intrinsecas de SQL Server sino solo de extender la funcion TRIM dependiendo de cada necesidad.

Me gustaria hacerle un TRIM a los que contaminan el planeta para poder desaparecerlos.

Hagamoslo por los sueños de nuestras nuevas generaciones.

noviembre 23, 2010 - Posted by | Base de Datos

3 comentarios »

  1. no sea mamon con lo que te gustaria hacer un trim a los ke contaminan el palneta tu codigo me gusto pero la cagaste con eso pendejo

    Comentario por Anónimo | julio 22, 2012

  2. Buena solucion. Gracias

    Comentario por Anónimo | septiembre 6, 2013

  3. Muchas gracias! Tenía un codigo similar para vb.met, pero yo lo necesitaba para sql server. 🙂

    Comentario por Miguel Vera | abril 16, 2014


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: