如何在PostgreSQL中用format()或to_char()格式化指定数字格式
药品价格格式化需求及问题
需要将药品售价格式化为整数部分用下划线作为千位分隔符、小数部分固定显示四位的格式(示例:31_235.3400)。使用PostgreSQL的to_char()函数尝试时未得到正确结果,尝试的查询语句如下:
SELECT fk_id, prod_id, a_id, CASE WHEN LENGTH(TO_CHAR(price, 'FM999999999D9999999')) <= 4 THEN TO_CHAR(price, '999D0000') ELSE TO_CHAR(price, 'FM999999999999999_999D0000') END as price FROM sellings
输入表
| FK_id | price |
|---|---|
| 1 | 156.00 |
| 1 | 213.00 |
| 1 | 359.00 |
| 1 | 620.00 |
| 1 | 110.00 |
| 1 | 97.00 |
| 1 | 1000.00 |
| 1 | 1090.40 |
期望输出表
| FK_id | price |
|---|---|
| 1 | 156.0000 |
| 1 | 213.0000 |
| 1 | 359.0000 |
| 1 | 620.0000 |
| 1 | 110.0000 |
| 1 | 97.0000 |
| 1 | 1_000.0000 |
| 1 | 1_090.4000 |
正确的PostgreSQL格式化方法
无需用CASE分支判断整数长度,直接使用to_char()的自定义格式模板即可实现需求:
SELECT fk_id, prod_id, a_id, TO_CHAR(price, 'FM999999999999_999_999D0000') AS price FROM sellings;
格式模板解析
FM:移除结果中的前导空格,避免短整数前出现多余空白999999999999_999_999:定义整数部分的显示规则,_作为千位分隔符,多个9支持更大范围的整数(可根据实际数值范围调整9的数量)D:代表小数点,确保输出使用.作为分隔符(若数据库区域设置影响,可直接替换为.)0000:强制小数部分显示四位,不足位数自动补0
该模板会自动适配所有整数长度:三位数及以下无下划线,四位数及以上自动用下划线分隔千位,小数部分始终保持四位。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

