web-dev-qa-db-fra.com

Afficher la virgule au lieu du point comme séparateur décimal

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?

8
Tim Schmelter

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.

15
Andy Korneyev

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

9
Phate01
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',')

devrait le faire (au moins pour obtenir 1025040,24)

3
Stuart Ainsworth

Vous pouvez utiliser replace quelque chose comme ceci:

DECLARE @euros money 
SET @euros = 1025040.2365

SELECT REPLACE(REPLACE(CONVERT(varchar(30), @euros, 1),',',''),'.',',');

SQL Fiddle Demo

0
FutbolFan

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.

0
PankajExplorer