Generar Folio con SQL Server

Developer Scripts

English Version
En ciertas ocasiones deseamos generar un folio (ID) que contenga cierta cantidad de caracteres y que rellene con ceros a la izquierda de tal manera que se respete la longitud del campo.

Imaginemos el siguiente escenario:
Tenemos el numero 756, y deseamos que se represente de esta manera: 0000000756

Creamos, entonces, la siguiente functión SQL Server:
CREATE FUNCTION [dbo].[fn_GeneraFolio]
    (@FOLIO BIGINT, @LEN SMALLINT)
RETURNS NVARCHAR(100)
AS
/*
ESTA FUNCIÓN GENERA UN FOLIO CON CEROS A LA IZQUIERDA.
JUAN GABRIEL CASTILLO TURRUBIATES
tyrodeveloper@gmail.com
20 dic 2011
Ejemplo:
SELECT dbo.fn_GeneraFolio(243,5) AS VALOR
Donde 243 es el numero a convertir y 5 
es el numero de caracteres, da como resultado:
|VALOR
00243
*/
BEGIN
    DECLARE @SRC_LEN SMALLINT, @DIFF_LEN SMALLINT, 
    @CONT SMALLINT, @ZERO NVARCHAR(100)
    SET @ZERO=''
    SET @SRC_LEN = LEN(CAST(@FOLIO AS NVARCHAR(100)))
    IF @LEN <= @SRC_LEN
    BEGIN
        --SI LA LONGITUD SOLICITADA ES MENOR O IGUAL QUE LA REAL
        SET @ZERO = ''
    END
    ELSE
    BEGIN
        --SI LA LONGITUD SOLICITADA ES MAYOR QUE LA REAL
        SET @CONT= 0
        SET @DIFF_LEN = @LEN - @SRC_LEN 
        WHILE(@CONT < @DIFF_LEN)
        BEGIN
            SET @ZERO = @ZERO + '0'
            SET @CONT = @CONT + 1
        END
    END
    RETURN @ZERO + CAST(@FOLIO AS NVARCHAR(100))
END

Implementación

Tenemos el número 756 y deseamos que se muestre con 10 caracteres, hacemos lo siguiente:

SELECT dbo.fn_GeneraFolio(756,10) AS VALOR


¡Hacer clic en +1 No te Cuesta Nada!

3 comentarios:

  1. Excelente, gran aporte. Se agradece.

    ResponderEliminar
  2. declare @folioFactura int
    set @folioFactura = 750
    Select replicate('0', 10 - len(@folioFactura)) + cast(@folioFactura as varchar)

    ResponderEliminar