AWS Athena中将Decimal类型转换为指定货币格式的技术咨询
解决PostgreSQL中自定义货币格式转换的问题
嘿,我懂你为啥用cast转money类型搞不定想要的格式了——money类型的显示规则完全绑定数据库的区域设置(比如lc_monetary参数),默认只会输出符合当前区域的样式(比如美式的$1,200,000.32),根本没法直接改成你要的千分位用.、小数用,的格式。
要实现$1.200.000,32这种自定义样式,得用PostgreSQL的to_char函数来手动控制字符串格式化,这才是灵活定制的正确路子。
具体解决方案
直接用嵌套的replace配合to_char调整分隔符,再加上美元符号前缀,SQL语句如下:
SELECT '$' || replace(replace(to_char(sum(value), '999G999G999D00'), '.', ','), ',', '.') AS formatted_currency FROM your_table_name;
一步步拆解逻辑
- 先通过
sum(value)计算出总和,这里就是1200000.32 - 用
to_char(..., '999G999G999D00')把数值转成带千分位和两位小数的字符串,默认会得到1,200,000.32(G是千分位占位符,D是小数占位符) - 第一个
replace把小数分隔符.换成,,得到1,200,000,32 - 第二个
replace把千分位分隔符,换成.,得到1.200.000,32 - 最后用
'$' || ...加上美元符号前缀,就得到了你要的$1.200.000,32
小提示
如果你的总和可能超过999,999,999,只需要给to_char的格式字符串加更多999G段就行,比如999G999G999G999D00就能处理到千亿级别的数值。
内容的提问来源于stack exchange,提问作者pouchewar
相关产品推荐
相关产品推荐

