SQL Server中如何仅用FORMAT函数实现可选小数的数字格式化(逗号分隔)
如何仅用FORMAT函数实现特定数字格式化(SQL Server)
我在SQL Server中有一张临时表#FOLLOWUP,包含长度(FULENGTE)和体重(FUGEWICHT)字段,需要把其中的数据格式化为小数部分可选,存在小数时用逗号而非点作为分隔符的形式。
目前我只能通过REPLACE结合FORMAT函数实现,但感觉这种方法比较取巧。下面是我的测试代码:
CREATE TABLE #FOLLOWUP ( [PATID] int, [FULENGTE] numeric(5,1), [FUGEWICHT] numeric(5,1) ); insert into #FOLLOWUP ( [PATID], [FULENGTE], [FUGEWICHT] ) values (1001, 175, 78.5), (1002, 171.5, 87), (1003, 181, 75), (1004, 172, 75), (1005, 176.5, 90), (1006, 167, 86), (1007, 170, 66), (1008, 181, 90); select patid, fulengte, FORMAT(fulengte, '0.#') as test_1, FORMAT(fulengte, '0,#') as test_2, FORMAT(fulengte, '#,#') as test_3, FORMAT(fulengte, '#.#0,#') as test_4, replace(FORMAT(fulengte, '0.#'), '.', ',') as test_hack from #FOLLOWUP
执行后得到如下结果:
patid fulengte test_1 test_2 test_3 test_4 test_hack 1001 175.0 175 175 175 175.00 175 1002 171.5 171.5 172 172 171.50 171,5 1003 181.0 181 181 181 181.00 181 1004 172.0 172 172 172 172.00 172 1005 176.5 176.5 177 177 176.50 176,5 1006 167.0 167 167 167 167.00 167 1007 170.0 170 170 170 170.00 170 1008 181.0 181 181 181 181.00 181
可以仅用FORMAT函数实现,关键是利用区域设置参数指定使用逗号作为小数分隔符,配合合适的格式字符串即可。
具体来说,使用FORMAT(fulengte, '0.#', 'de-DE')就能达到需求:德语区域(de-DE)默认以逗号作为小数分隔符,格式字符串0.#保证整数部分至少一位,小数部分可选且最多显示一位。
修改后的查询代码如下:
select patid, fulengte, FORMAT(fulengte, '0.#', 'de-DE') as test_format from #FOLLOWUP
执行后会得到和test_hack列完全一致的结果:
patid fulengte test_format 1001 175.0 175 1002 171.5 171,5 1003 181.0 181 1004 172.0 172 1005 176.5 176,5 1006 167.0 167 1007 170.0 170 1008 181.0 181
原理说明
'0.#'格式字符串:0确保整数部分至少显示一位,#表示小数部分仅在存在时显示,且最多显示一位;- 第三个参数
'de-DE'指定区域设置,该区域的小数分隔符为逗号,无需手动替换。
内容的提问来源于stack exchange,提问作者BdR
相关产品推荐
相关产品推荐

