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
DECLARE @euros money
SET @euros = 1025040.2365
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',')
Run Code Online (Sandbox Code Playgroud)
应该这样做(至少要得到1025040,24)