FORMAT (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Endpoint di analisi SQL di Azure Synapse Analyticsin Microsoft FabricWarehouse in Microsoft Fabric

Restituisce un valore formattato con il formato specificato e impostazioni cultura facoltative. 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 di sintassi Transact-SQL

Sintassi

FORMAT( value, format [, culture ] )  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

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. È consigliabile iniziare con l'argomento "Formattazione di tipi."

Impostazioni cultura
Argomento nvarchar facoltativo che specifica le impostazioni cultura.

Se l'argomento culture non è specificato, viene usata la lingua della sessione corrente. Tale lingua viene impostata in modo implicito o in modo esplicito tramite l'istruzione SET LANGUAGE. culture accetta come argomento qualsiasi impostazione cultura supportata da .NET Framework e 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 non valido. Ad esempio, viene restituito Null se il valore specificato in format non è valido.

La funzione FORMAT è di tipo non deterministico.

FORMAT è basato sulla presenza di CLR (Common Language Runtime) di .NET Framework.

Questa funzione non può essere eseguita in modalità remota poiché dipende dalla presenza di CLR. L'esecuzione in modalità remota di una funzione che richiede CLR potrebbe provocare un errore sul server remoto.

FORMAT si basa sulle regole di formattazione di CLR, che indicano che i due punti e le virgole devono essere preceduti dal carattere di escape. Di conseguenza, quando la stringa di formato (secondo parametro) contiene un carattere due punti o virgola, tale carattere deve essere preceduto dalla barra rovesciata quando un valore di input (il primo parametro) è del tipo di dati time. Vedere D. FORMAT con tipi di dati ora.

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
Numerico bigint Int64
Numerico int Int32
Numerico smallint Int16
Numerico tinyint Byte
Numerico decimal SqlDecimal
Numeric numeric SqlDecimal
Numerico float Double
Numerico real Singola
Numerico smallmoney Decimale
Numerico money Decimale
Data e ora data Data/Ora
Data e ora time TimeSpan
Data e ora data/ora Data/Ora
Data e ora smalldatetime Data/Ora
Data e ora datetime2 Data/Ora
Data e ora datetimeoffset DateTimeOffset

Esempi

R. Esempio semplice di FORMAT

Nell'esempio seguente viene restituita una data semplice nel formato per impostazioni cultura diverse.

DECLARE @d DATE = '11/22/2020';
SELECT FORMAT( @d, 'd', 'en-US' ) 'US English'  
      ,FORMAT( @d, 'd', 'en-gb' ) 'British English'  
      ,FORMAT( @d, 'd', 'de-de' ) 'German'  
      ,FORMAT( @d, 'd', 'zh-cn' ) 'Chinese Simplified (PRC)';  
  
SELECT FORMAT( @d, 'D', 'en-US' ) 'US English'  
      ,FORMAT( @d, 'D', 'en-gb' ) 'British English'  
      ,FORMAT( @d, 'D', 'de-de' ) 'German'  
      ,FORMAT( @d, 'D', 'zh-cn' ) 'Chinese Simplified (PRC)';  

Questo è il set di risultati.

US English  British English       German     Simplified Chinese (PRC)  
----------  --------------------- ---------- ------------------------  
11/22/2020  22/11/2020            22.11.2020 2020/11/22 
  
US English                  British English        German                      Chinese (Simplified PRC)  
--------------------------- ---------------------- --------------------------  ---------------------------------------  
Sunday, November 22, 2020   22 November 2020       Sonntag, 22. November 2020  2020年11月22日  
  

B. FORMAT con stringhe di formattazione personalizzate

Nell'esempio seguente vengono illustrati i valori numerici di formattazione specificando un formato personalizzato. Nell'esempio si presuppone che la data corrente sia il 22 novembre 2020. Per altre informazioni su questi e altri formati personalizzati, vedere Stringhe di formato numerico personalizzato.

DECLARE @d DATE = GETDATE();  
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'Date'  
       ,FORMAT(123456789,'###-##-####') AS 'Custom Number';  

Questo è il set di risultati.

Date        Custom Number  
----------  -------------  
22/11/2020  123-45-6789  
  

C. FORMAT con tipi numerici

Nell'esempio seguente vengono restituite 5 righe dalla tabella Sales.CurrencyRate nel database AdventureWorks2022. 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 altre informazioni su questi e altri formati numerici, vedere Stringhe di formato numerico standard.

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

Questo è il 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  
  

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 €  
  

D. D. FORMAT con tipi di dati ora

FORMAT restituisce Null in questi casi, perché . e : non sono preceduti dal carattere di escape.

SELECT FORMAT(cast('07:35' as time), N'hh.mm');   --> returns NULL  
SELECT FORMAT(cast('07:35' as time), N'hh:mm');   --> returns NULL  

Format restituisce una stringa formattata in quanto . e : sono preceduti dal carattere di escape.

SELECT FORMAT(cast('07:35' as time), N'hh\.mm');  --> returns 07.35  
SELECT FORMAT(cast('07:35' as time), N'hh\:mm');  --> returns 07:35  

Format restituisce un'ora corrente formattata con l'indicazione AM o PM

SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); -- returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); -- returns 03:46 P

Format restituisce l'ora specificata, con AM

select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm tt') -- returns 01:00 AM
select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm t')  -- returns 01:00 A

Format restituisce l'ora specificata, con PM

select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm tt') -- returns 02:00 PM
select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm t') -- returns 02:00 P

Format restituisce l'ora specificata nel formato 24 ore

select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'HH:mm') -- returns 14:00

Vedi anche