Show comma instead of point as decimal separator

你离开我真会死。 提交于 2019-11-30 14:27:57

Well, as far as I know, there are no culture-specific options for convert available.

So you can do it using replaces (yes, it looks a bit ugly...)

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

Idea: first change comma to something, then change dot to comma, and then "something" back to dot.

To provide the appropriate culture info, in SQL 2012 there is the FORMAT() function. Here's an example:

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))

returns

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

You can also specify in the second parameter a custom format string with the same rules as for .NET.

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

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

should do it (at least to get 1025040,24)

You could use replace something like this:

DECLARE @euros money 
SET @euros = 1025040.2365

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

SQL Fiddle Demo

You can first replace thousand separator comma(,) to a Zero length string (''), and then you can replace Decimal('.') to comma(',') in the same select statement.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!