Je veux juste obtenir le bon format numérique ici en Allemagne, donc j'ai besoin de montrer des virgules comme séparateur décimal au lieu de points. Mais ça...
DECLARE @euros money
SET @euros = 1025040.2365
SELECT CONVERT(varchar(30), @euros, 1)
Affiche 1,025,040.24
au lieu de 1.025.040,24
(ou 1025040,24
). En C #, il serait simple de fournir le CultureInfo
approprié mais comment le faire en T-SQL?
Dois-je vraiment utiliser REPLACE
? Mais même si, comment remplacer 1,025,040.24
correctement?
Pour autant que je sache, aucune option de conversion spécifique à la culture n'est disponible.
Vous pouvez donc le faire en utilisant des remplacements (oui, ça a l'air un peu moche ...)
select
replace(replace(replace(convert(varchar(30), @euros, 1), ',', '|'), '.', ','), '|', '.')
Idée: changez d'abord la virgule en quelque chose, puis changez le point en virgule, puis "quelque chose" en point.
Pour fournir les informations de culture appropriées, dans SQL 2012, il existe la fonction FORMAT()
. Voici un exemple:
declare @f float = 123456.789;
select
[raw] = str(@f,20,3)
,[standard] = cast(format(@f, 'N', 'en-US') as varchar(20))
,[European] = cast(format(@f, 'N', 'de-de') as varchar(20))
retour
raw |standard |European |
---------------------|-----------|-----------|
123456.789 |123,456.79 |123.456,79 |
Vous pouvez également spécifier dans le deuxième paramètre une chaîne de format personnalisé avec les mêmes règles que pour .NET.
Documents: https://msdn.Microsoft.com/en-US/library/hh213505.aspx
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',')
devrait le faire (au moins pour obtenir 1025040,24
)
Vous pouvez utiliser replace
quelque chose comme ceci:
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(REPLACE(CONVERT(varchar(30), @euros, 1),',',''),'.',',');
Vous pouvez d'abord remplacer mille virgule séparatrice (,) par une chaîne de longueur nulle (''), puis vous pouvez remplacer Decimal ('.') Par virgule (',') dans la même instruction select.