FORMAT (Transact-SQL)

Devuelve un valor con formato con el formato y la referencia cultural opcional especificados en SQL Server 2012. Use la función FORMAT para aplicar formato específico de la configuración regional de los valores de fecha/hora y de número como cadenas. Para las conversiones de tipos de datos generales, use CAST o CONVERT.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

FORMAT ( value, format [, culture ] )

Argumentos

  • value
    Expresión de un tipo de datos compatible a la que se va a dar formato. Para obtener una lista de tipos válidos, vea la tabla de la sección Comentarios.

  • format
    Modelo de formato nvarchar.

    El argumento format debe contener una cadena de formato de .NET Framework válida, como una cadena de formato estándar (por ejemplo, "C" o "D"), o como un modelo de caracteres personalizados para los valores de fecha y numéricos (por ejemplo, "DD de MMMM, aaaa (dddd)"). No se admite el formato compuesto. Para obtener una explicación completa de estos modelos de formato, consulte la documentación de .NET Framework sobre el formato de cadena en general, los formatos de fecha y hora personalizados, y los formatos de número personalizados. Un buen punto de partida es el tema "Aplicar formato a tipos”.

  • culture
    Argumento opcional de tipo nvarchar que especifica una referencia cultural.

    Si no se proporciona el argumento culture, se usará el idioma de la sesión actual. Este idioma se establece implícitamente, o explícitamente mediante la instrucción SET LANGUAGE. culture acepta cualquier referencia cultural compatible con .NET Framework como argumento; no se limita a los idiomas admitidos explícitamente por SQL Server. Si el argumento culture no es válido, FORMAT producirá un error.

Tipos de valor devuelto

nvarchar o NULL

La longitud del valor devuelto viene determinada por format.

Comentarios

FORMAT devuelve NULL para los errores distintos de un valor de culture que no es valid. Por ejemplo, se devuelve NULL si el valor especificado en format no es válido.

FORMAT se basa en la presencia de Common Language Runtime (CLR) de .NET Framework.

Esta función no se enviará de forma remota puesto que depende de la presencia del CLR. El envío remoto de una función que necesita el CLR produciría un error en el servidor remoto.

En la tabla siguiente se muestran los tipos de datos aceptables para el argumento value, junto con sus tipos equivalentes de asignación de .NET Framework.

Categoría

Tipo

Tipo de .NET

Numérico

bigint

Int64

Numérico

int

Int32

Numérico

smallint

Int16

Numérico

tinyint

Byte

Numérico

decimal

SqlDecimal

Numérico

numeric

SqlDecimal

Numérico

float

Double

Numérico

real

Single

Numérico

smallmoney

Decimal

Numérico

money

Decimal

Fecha y hora

date

DateTime

Fecha y hora

time

Timespan

Fecha y hora

datetime

DateTime

Fecha y hora

smalldatetime

DateTime

Fecha y hora

datetime2

DateTime

Fecha y hora

datetimeoffset

DateTimeOffset

Ejemplos

A. Ejemplo simple de FORMAT

En el ejemplo siguiente se devuelve una fecha simple con formato para distintas referencias culturales.

DECLARE @d DATETIME = '10/01/2011';
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'; 

El conjunto de resultados es el siguiente.

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1

(1 row(s) affected)

US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011年10月1日

(1 row(s) affected)

B. FORMAT con cadenas de formato personalizado

En el ejemplo siguiente se muestran valores numéricos de formato especificando un formato personalizado. Para obtener más información sobre estos y otros formatos personalizados, vea Cadenas con formato numérico personalizado.

-- Current date is September 27 2012.
DECLARE @d DATETIME = GETDATE();
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'DateTime Result'
       ,FORMAT(123456789,'###-##-####') AS 'Custom Number Result';

El conjunto de resultados es el siguiente.

DateTime Result  Custom Number Result
--------------   --------------------
27/09/2012       123-45-6789

(1 row(s) affected)

C. FORMAT con tipos numéricos

En el ejemplo siguiente se devuelven 5 filas de la tabla Sales.CurrencyRate. La columna EndOfDateRate se almacena con el tipo money en la tabla. En este ejemplo, la columna se devuelve sin formato y después con formato especificando el formato Number de .NET, el formato General y los tipos de formato Currency. Para obtener más información sobre estos y otros formatos numéricos, vea Cadenas con formato numérico estándar.

USE AdventureWorks2012;
GO
SELECT TOP(5)CurrencyRateID, EndOfDayRate
            ,FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Number Format'
            ,FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format'
            ,FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;

El conjunto de resultados es el siguiente.

CurrencyRateID EndOfDayRate  Numeric Format  General Format  Currency Format
-------------- ------------  --------------  --------------  ---------------
1              1.0002        1.00            1.0002          $1.00
2              1.55          1.55            1.5500          $1.55
3              1.9419        1.94            1.9419          $1.94
4              1.4683        1.47            1.4683          $1.47
5              8.2784        8.28            8.2784          $8.28

(5 row(s) affected)

En este ejemplo se especifica la referencia cultural de alemán (de-de).

SELECT TOP(5)CurrencyRateID, EndOfDayRate
            ,FORMAT(EndOfDayRate, 'N', 'de-de') AS 'Numeric Format'
,FORMAT(EndOfDayRate, 'G', 'de-de') AS 'General Format'
,FORMAT(EndOfDayRate, 'C', 'de-de') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;

CurrencyRateID EndOfDayRate  Numeric Format  General Format  Currency Format
-------------- ------------  --------------  --------------  ---------------
1              1.0002        1,00            1,0002          1,00 €
2              1.55          1,55            1,5500          1,55 €
3              1.9419        1,94            1,9419          1,94 €
4              1.4683        1,47            1,4683          1,47 €
5              8.2784        8,28            8,2784          8,28 €

 (5 row(s) affected)

Vea también

Referencia

CAST y CONVERT (Transact-SQL)