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!
Excelente, gran aporte. Se agradece.
ResponderEliminarExcelente. gracias
ResponderEliminardeclare @folioFactura int
ResponderEliminarset @folioFactura = 750
Select replicate('0', 10 - len(@folioFactura)) + cast(@folioFactura as varchar)