PostgreSQL中SQL Server format()函数的等效数字格式化方法问询
PostgreSQL实现SQL Server FORMAT函数的负数格式化需求
你需要把负数-4059587.225000按en-US文化格式化为(4,059,587.23),在SQL Server里用FORMAT()函数能直接实现,但PostgreSQL的to_char()函数语法和它不一样,直接用你写的格式串会因为包含两个小数点报错。
解决方法
可以用CASE语句结合to_char()来实现,逻辑是判断数值正负:负数取绝对值后格式化,再用括号包裹;正数直接格式化。示例语句如下:
SELECT CASE WHEN col < 0 THEN '(' || to_char(abs(col), 'FM#,##0.00') || ')' ELSE to_char(col, 'FM#,##0.00') END AS formatted_number FROM (SELECT -4059587.225000 AS col) t;
执行这条语句会输出(4,059,587.23),完全符合预期。
细节说明
FM修饰符用来去除格式化结果中不必要的前导空格abs(col)取负数的绝对值,确保格式化的是正数部分to_char的#,##0.00格式对应en-US的千位分隔符和两位小数,四舍五入规则和SQL Server一致- 如果你的数据库
lc_numeric不是en-US,可以先执行SET lc_numeric = 'en_US.UTF-8';来确保千位分隔符和小数点的格式正确
内容的提问来源于stack exchange,提问作者MAK
相关产品推荐
相关产品推荐

