FORMAT (Transact-SQL)
Retourne une valeur mise en forme avec la culture facultative et le format spécifiés dans SQL Server 2012. Utilisez la fonction FORMAT pour la mise en forme comme chaînes de valeurs de date/heure et de valeurs numériques compatibles avec les paramètres régionaux. Pour les conversions de type de données général, continuez à utiliser CAST ou CONVERT.
Conventions de la syntaxe Transact-SQL
Syntaxe
FORMAT ( value, format [, culture ] )
Arguments
value
Expression d'un type de données pris en charge à mettre en forme. Pour obtenir la liste des types valides, consultez la table dans la section Notes ci-dessous.format
Modèle de format nvarchar.L'argument format doit contenir une chaîne de format .NET Framework valide, comme chaîne de format standard (par exemple, « C » ou « D ») ou comme modèle de caractères personnalisés pour les dates et les valeurs numériques (par exemple, « MMMM JJ, aaaa (jjjj) »). La mise en forme composite n'est pas prise en charge. Pour une explication complète de ces modèles de mise en forme, consultez la documentation du .NET Framework sur la mise en forme de chaîne en général, sur les formats de date et d'heure personnalisés et sur les formats de nombres personnalisés. La rubrique « Mise en forme des types » constitue un bon point de départ.
culture
Argument facultatif nvarchar spécifiant une culture.Si l'argument culture n'est pas fourni, la langue de la session active est utilisée. Cette langue est définie implicitement, ou explicitement à l'aide de l'instruction SET LANGUAGE. L'argument culture accepte n'importe quelle culture prise en charge par le .NET Framework comme argument ; il n'est pas limité aux langues explicitement prises en charge par SQL Server. Si l'argument culture n'est pas valide, FORMAT génère une erreur.
Types des valeurs retournés
nvarchar ou NULL.
La longueur de la valeur de retour est déterminée par format.
Notes
FORMAT retourne NULL pour les erreurs autres que culture qui n'est pas valid. Par exemple, NULL est retourné si la valeur spécifiée dans format n'est pas valide.
FORMAT repose sur la présence du CLR (Common Langage Runtime) .NET Framework.
Cette fonction ne peut pas être exécutée à distance car elle dépend de la présence du CLR. L'exécution à distance d'une fonction qui nécessite le CLR provoquerait une erreur sur le serveur distant.
Le tableau suivant répertorie les types de données acceptables pour l'argument value, ainsi que leurs types équivalents de mappage .NET Framework.
Catégorie |
Type |
Type .NET |
---|---|---|
Numérique |
bigint |
Int64 |
Numérique |
int |
Int32 |
Numérique |
smallint |
Int16 |
Numérique |
tinyint |
Byte |
Numérique |
decimal |
SqlDecimal |
Numérique |
numeric |
SqlDecimal |
Numérique |
float |
Double |
Numérique |
real |
Single |
Numérique |
smallmoney |
Décimal |
Numérique |
money |
Décimal |
Date et heure |
date |
DateTime |
Date et heure |
time |
TimeSpan |
Date et heure |
datetime |
DateTime |
Date et heure |
smalldatetime |
DateTime |
Date et heure |
datetime2 |
DateTime |
Date et heure |
datetimeoffset |
DateTimeOffset |
Exemples
A. Exemple FORMAT simple
L'exemple suivant retourne une date simple mise en forme pour différentes cultures.
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';
Voici l'ensemble des résultats.
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 avec chaînes de format personnalisées
L'exemple suivant montre la mise en forme des valeurs numériques en spécifiant un format personnalisé. Pour plus d'informations sur ces formats et d'autres formats personnalisés, consultez Chaînes de format numérique personnalisées.
-- 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';
Voici l'ensemble des résultats.
DateTime Result Custom Number Result
-------------- --------------------
27/09/2012 123-45-6789
(1 row(s) affected)
C. FORMAT avec types numériques
L'exemple suivant retourne 5 lignes de la table Sales.CurrencyRate. La colonne EndOfDateRate est stockée comme type money dans la table. Dans cet exemple, la colonne est retournée dépourvue de mise en forme, puis mise en forme en spécifiant les types de formats Number, General et Currency .NET. Pour plus d'informations sur ces formats et d'autres formats numériques, consultez Chaînes de format numérique 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;
Voici l'ensemble des résultats.
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)
Cet exemple spécifie la culture allemande (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)