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.
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)