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

时间:2015-07-24 13:01:11

标签: sql-server tsql sql-server-2005 type-conversion currency

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

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

5 个答案:

答案 0 :(得分:15)

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

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

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

想法:首先将逗号更改为某些内容,然后将点更改为逗号,然后将“某些内容”更改为点。

答案 1 :(得分:8)

为了提供适当的文化信息,在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))

返回

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

您可以使用replace这样的内容:

DECLARE @euros money 
SET @euros = 1025040.2365

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

SQL Fiddle Demo

答案 4 :(得分:0)

您可以先将千位分隔符逗号(,)替换为零长度字符串(''),然后您可以将十进制('。')替换为逗号(& #39;,')在同一个select语句中。