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

Show comma instead of point as decimal separator

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

DECLARE @euros money
SET @euros = 1025040.2365
SELECT CONVERT(varchar(30), @euros, 1)

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

中做到这一点

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

嗯,据我所知,没有特定于文化的转换选项可用。

所以你可以使用替换来完成(是的,它看起来有点丑...)

select 
    replace(replace(replace(convert(varchar(30), @euros, 1), ',', '|'), '.', ','), '|', '.')

思路:先把逗号改成什么东西,然后把点改成逗号,然后"something"变回点。

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

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

您可以使用 replace 这样的东西:

DECLARE @euros money 
SET @euros = 1025040.2365

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

SQL Fiddle Demo

您可以先将千位分隔符逗号(,)替换为零长度字符串(''),然后您可以将小数('.')替换为逗号(',') select声明。

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

declare @f float = 123456.789;

select
  [raw]      = str(@f,20,3)
 ,[standard] = cast(format(@f, 'N', 'en-US') as varchar(20))
 ,[German] = cast(format(@f, 'N', 'de-DE') as varchar(20))

returns

raw                  |standard   |German     |
---------------------|-----------|-----------|
          123456.789 |123,456.79 |123.456,79 |

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

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