sábado, 5 de julio de 2014

SQL Server Formatear números

Formatear números en SQL Server

Una duda que suele tener la gente es como formatear los datos numérico es SQL Server - Es bastante común tener que formatear un número completando con ceros hasta un número determinado de posiciones.
Podemos hacer un bucle para concatenar la expresion resultante, pero no parece ni mucho menos la opción mas adecuada.
El siguiente script ilustra una forma más eficiente de conseguir el mismo resultado.

 

DECLARE @num int,
@formato varchar(10),
@expresion varchar(10)
SET @formato = '0000000000'
SET @num = 2002
SET @expresion = RIGHT( @formato + cast(@num AS varchar), 10)
SELECT @expresion
La idea es concatenar una expresion de formato fijo - los ceros - con el número a formatear. Posteriormente utilizamos la función RIGHT para recortar los n elementos de la derecha.
La salida de la ejecucion es la siguiente:

 

DATO_FORMATEADO ---------------0000002002
Como podemos ver, hemos conseguido nuestro objetivo. Por supuesto, este truco es válido también para completar con espacios en blanco - muy util para obtener ficheros de ancho fijo - o cualquier otro tipo de caracter.
Podemos hacer las cosas un poco mejor, y creamos una funcion a la que le pasaremos el número a formatear y el formato de salida.
CREATE FUNCTION dbo.FormatNum
( @number int,
@format varchar(50)
)
RETURNS varchar(50)
AS BEGIN DECLARE @len int
SET @len = len(@format)
RETURN RIGHT( @format + cast(@number AS varchar), @len)
END
Sobre  una supuesta tabla Pais, que hemos cargado previamente con cinco registros - con el código autonumérico - ejecutamos la siguiente consulta:
SELECT dbo.FormatNum(CodPais,'000000000000') AS CodPais,
NombrePais,
ActivoFROM Pais
El resultado de la consulta es el siguiente:
CodPais           NombrePais     Activo
----------------- -------------- ------
000000000001      Pais 0         0
000000000002      Pais 1         0
000000000003      Pais 2         0
000000000004      Pais 3         0
000000000005      Pais 4         0

No hay comentarios.:

Publicar un comentario