显示逗号而不是点作为小数分隔符

Tim*_*ter 7 t-sql sql-server currency sql-server-2005 type-conversion

我只想在德国获得正确的数字格式,所以我需要将逗号显示为小数点分隔符而不是点数.但是这个...

DECLARE @euros money
SET @euros = 1025040.2365
SELECT CONVERT(varchar(30), @euros, 1)
Run Code Online (Sandbox Code Playgroud)

显示1,025,040.24而不是1.025.040,24(或1025040,24).在C#中提供适当的CultureInfo但是如何在T-SQL中执行它会很简单?

我真的需要用REPLACE吗?但即使如何1,025,040.24正确更换?

And*_*yev 15

嗯,据我所知,没有针对特定文化的转换选项.

所以你可以用替换来做(是的,它看起来有点难看......)

select 
    replace(replace(replace(convert(varchar(30), @euros, 1), ',', '|'), '.', ','), '|', '.')
Run Code Online (Sandbox Code Playgroud)

想法:首先将逗号更改为某些内容,然后将点更改为逗号,然后将"某些内容"更改为点.


Pha*_*e01 10

为了提供适当的文化信息,在SQL 2012中有FORMAT()功能.这是一个例子:

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))
Run Code Online (Sandbox Code Playgroud)

回报

raw                  |standard   |European   |
---------------------|-----------|-----------|
          123456.789 |123,456.79 |123.456,79 |
Run Code Online (Sandbox Code Playgroud)

您还可以在第二个参数中指定一个自定义格式字符串,其规则与.NET相同.

文档:https://msdn.microsoft.com/en-US/library/hh213505.aspx


Stu*_*rth 6

DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',')
Run Code Online (Sandbox Code Playgroud)

应该这样做(至少要得到1025040,24