Format en SQL Server (Transact-SQL)

4
21007
SQL Server

La función Format aplica desde SQL Server 2012 en adelante. Retorna un valor con el formato previamente indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como varchar en un formato específico.

La forma de utilizarlo es: FORMAT(valor, formato, [cultura (opcional)])

El parámetro “valor” es el valor que quieres formatear, debe ser un dato compatible con la función. El formato es precisamente como queremos nuestro resultado (ej. “C”, “D”, “g”, “dd/MM/yyyy”), basicamente igual a como se utiliza la funcion Format en .Net. Cultura es un valor opcional, todavia no lo he utilizado pero es para obtener el resultado en nuestro propio idioma o lenguaje.

Cuales tipos de dato podemos envía en el campo valor?
bigint, int, smallint, tinyint, decimal, numeric, float, real, smallmoney, money, date, time, datetime, smalldatetime, datetime2, datetimeoffset.

Resultado con formato personalizado (ver tipos de cadenas con formato)

DECLARE @d DATETIME = GETDATE();

SELECT FORMAT(@d, 'dd/MM/yyyy') 'Custom DateTime',
	   FORMAT(@d, 'dd/MM/yyyy hh:mm:ss tt') 'Custom DateTime 2',
	   FORMAT(@d, 'dd/MM/yyyy HH:mm:ss') 'Custom 3 (24 horas)'

SELECT FORMAT(123456789,'(###)-##-####') AS 'Teléfono',
       FORMAT(10,'##.00%') AS 'Porcentaje',
       FORMAT(100,'00000.00') AS 'Numerico 1',
       FORMAT(1000000.00,'##,###.00') AS 'Numerico Decimal'
sql_format_01

Resultado con formato de fechas estándar

DECLARE @d DATETIME = GETDATE();

SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; 
  
SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result'; 
sql_format_02

Resultado con formato numérico estándar (ver tipos de formato numérico)

SELECT FORMAT(1234567.89, 'N') as 'Número'
      ,FORMAT(1234567.89, 'G') as 'Normal'
      ,FORMAT(0.039, 'P') as 'Porcentaje'
      ,FORMAT(1234567.89, 'C','en-US') as 'Dinero US'
      ,FORMAT(1234567.89, 'C','en-gb') as 'Dinero GB'
      ,FORMAT(1234567.89, 'C','ja-JP') as 'Dinero Japón'
      ,FORMAT(1234567.89, 'C','fr-FR') as 'Dinero Francia'
sql_format_03

Para ver mas ejemplos de formato que se pueden aplicar ver los siguientes enlaces.
Formato en SQL Server
Cadenas con formato numérico estándar
Cadenas con formato numérico personalizado

4 COMMENTS

  1. Hola estimado, me podrías ayudar con esta secuencia de sql, que no puedo agregarle los separadores de miles. el numero aparece de esta forma 123456789 y debería salir 123.456.789

    SELECT CODIGO, CUENTAS, ROUND(DEBITO, “0”) AS DEBITO_, ROUND(CREDITO,0) AS CREDITO_, ROUND(DEUDOR,0) AS DEUDOR_, ROUND(ACREEDOR,0) AS ACREEDOR_, ROUND(ACTIVO,0) AS ACTIVO_, ROUND(PASIVO,0) AS PASIVO_, ROUND(PERDIDA,0) AS PERDIDA_, ROUND(GANANCIA,0) AS GANANCIA_
    FROM BALANCE1

    UNION
    SELECT CODIGO, CUENTAS, ROUND(DEBITO, “0”) AS DEBITO_, ROUND(CREDITO,0) AS CREDITO_, ROUND(DEUDOR,0) AS DEUDOR_, ROUND(ACREEDOR,0) AS ACREEDOR_, ROUND(ACTIVO,0) AS ACTIVO_, ROUND(PASIVO,0) AS PASIVO_, ROUND(PERDIDA,0) AS PERDIDA_, ROUND(GANANCIA,0) AS GANANCIA_
    FROM BALANCE2

  2. Hola,

    Necesito exportar estos valores desde una table pero no se como integrarle espacios antes del numero por ejemplo en el primer campo tengo “108080” que me cubre 6 posiciones pero trendia que completar 10. Usted sabe como podria hacer esto?

    108080,MXP, 1.0000,37F4869C-633A-4EA0-9656-DFC780BFB5EC,14/03/2018

LEAVE A REPLY

Please enter your comment!
Please enter your name here