FORMAT (Transact-SQL)
Restituisce un valore formattato con il formato specificato e impostazioni cultura facoltative in SQL Server 2012. Utilizzare la funzione FORMAT per formattare in base alle impostazioni locali i valori numerici e di data/ora come stringhe. Per le conversioni di tipi di dati generali, utilizzare CAST o CONVERT.
Convenzioni della sintassi Transact-SQL
Sintassi
FORMAT ( value, format [, culture ] )
Argomenti
value
Espressione di un tipo di dati supportato da formattare. Per un elenco di tipi validi, vedere la tabella nella sezione Osservazioni indicata di seguito.format
Schema di formattazione nvarchar.L'argomento format deve contenere una stringa di formato .NET Framework valida, ovvero una stringa di formato standard (ad esempio "C" o "D") o uno schema di caratteri personalizzati per date e valori numerici (ad esempio "MMMM GG, aaaa (gggg)"). La formattazione composta non è supportata. Per una spiegazione completa di questi schemi di formattazione, vedere la documentazione di .NET Framework sulla formattazione di stringhe in formati di data e ora generali e personalizzati e in formati di numero personalizzati. Si consiglia di iniziale con l'argomento "Formattazione dei tipi di dati."
culture
Argomento nvarchar facoltativo che specifica le impostazioni cultura.Se l'argomento culture non è specificato, viene utilizzata la lingua della sessione corrente. Questa lingua è impostata in modo implicito oppure in modo esplicito tramite l'istruzione SET LANGUAGE. culture accetta qualsiasi impostazione cultura supportata da.NET Framework come argomento; non è limitato alle lingue supportate in modo esplicito da SQL Server. Se l'argomento culture non è valido, FORMAT genera un errore.
Tipi restituiti
nvarchar o Null
La lunghezza del valore restituito viene determinata da format.
Osservazioni
FORMAT restituisce NULL per errori diversi da un valore di culture diverso da valid. Ad esempio, viene restituito NULL se il valore specificato in format non è valido.
FORMAT è basato sulla presenza di CLR (Common Language Runtime) di .NET Framework.
Questa funzione non sarà eseguita in modalità remota poiché dipende dalla presenza di CLR. L'esecuzione in modalità remota di una funzione che richiede CLR provocherebbe un errore sul server remoto.
Nella tabella seguente vengono elencati i tipi di dati accettabili per l'argomento value, insieme con i tipi equivalenti di mapping per .NET Framework.
Categoria |
Tipo |
Tipo .NET |
---|---|---|
Valore numerico |
bigint |
Int64 |
Valore numerico |
int |
Int32 |
Valore numerico |
smallint |
Int16 |
Valore numerico |
tinyint |
Byte |
Valore numerico |
decimal |
SqlDecimal |
Valore numerico |
numeric |
SqlDecimal |
Valore numerico |
float |
Double |
Valore numerico |
real |
Single |
Valore numerico |
smallmoney |
Decimal |
Valore numerico |
money |
Decimal |
Data e ora |
date |
DateTime |
Data e ora |
time |
TimeSpan |
Data e ora |
datetime |
DateTime |
Data e ora |
smalldatetime |
DateTime |
Data e ora |
datetime2 |
DateTime |
Data e ora |
datetimeoffset |
DateTimeOffset |
Esempi
A. Esempio semplice di FORMAT
Nell'esempio seguente viene restituita una data semplice nel formato per impostazioni cultura diverse.
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';
Set di risultati:
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 stringhe di formattazione personalizzate
Nell'esempio seguente vengono illustrati i valori numerici di formattazione specificando un formato personalizzato. Per ulteriori informazioni su questi e altri formati personalizzati, vedere Stringhe di formato numerico personalizzate.
-- 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';
Set di risultati:
DateTime Result Custom Number Result
-------------- --------------------
27/09/2012 123-45-6789
(1 row(s) affected)
C. FORMAT con tipi numerici
Nell'esempio seguente vengono restituite 5 righe della tabella Sales.CurrencyRate. La colonna EndOfDateRate viene archiviata come tipo money nella tabella. In questo esempio, la colonna viene restituita senza formattazione e viene quindi formattata specificando i tipi di formato di numero, valuta e generico di .NET. Per ulteriori informazioni su questi e altri formati numerici, vedere Stringhe di formato numerico standard.
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;
Set di risultati:
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)
In questo esempio vengono specificate le impostazioni cultura tedesche (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)