我只想在德国获得正确的数字格式,所以我需要将逗号显示为小数点分隔符而不是点数。但是......
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
?
答案 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相同。
答案 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),',',''),'.',',');
答案 4 :(得分:0)
您可以先将千位分隔符逗号(,)替换为零长度字符串(''),然后您可以将十进制('。')替换为逗号(& #39;,')在同一个select语句中。