viernes, 17 de diciembre de 2010

PadLeft en SQL SERVER

Desafortunadamente SQL SERVER 2008 y versiones anteriores no tiene esta función por lo que podríamos crear una consulta de la sig forma

SELECT ISNULL(REPLICATE('0', 5 - len(ISNULL('2' ,0))), '') + '2'

La cual regresaría 00002

¿Cómo Funciona?
La función replicate duplica un carácter el número de veces que le indiquemos,
aplicamos la fórmula para determinar el tamaño de la replicación, esto sería
replicacion=longitud total del campo-longitud actual de la cadena de caracteres
una vez que obetenemos la replicación simplemente sumamos la cadena de carácteres

Ahora si se ocupa muchas veces podríamos hacer una función

CREATE FUNCTION [dbo].[PadLeft]
(@Secuencia varchar(16),
@caracter char(1),
@longitud int
)
RETURNS varchar(16) AS
BEGIN
DECLARE @curSeq varchar(16)
SELECT @curSeq = ISNULL(REPLICATE(@caracter, @longitud - len(ISNULL(@Secuencia ,0))), '') + @Secuencia
RETURN @curSeq
END

La podemos probar de la sig. forma

SELECT dbo.PadLeft('9','0',5)
SELECT dbo.PadLeft('10','0',5)

--Util para manejo de folios

1 comentario: