如何在PostgreSQL函数中使用format()或to_char()bulilt设置数字格式

bsxbgnwa  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(1)|浏览(199)

如何将数字格式化为31_235,3400,我尝试使用to_char()内置函数,但每次都得到错误的输出。
因此,药物的销售价格应采用四位小数的格式显示,始终显示并以小数点分隔,而整数始终显示,并使用下划线作为千位分隔符,例如:31_235,3400
下面是我尝试过的查询

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_标识|价格|
| - ------|- ------|
| 1个|一百五十六元|
| 1个|二一三点整|
| 1个|三百五十九元|
| 1个|六百二十元|
| 1个|一百一十点整|
| 1个|九十七点整|
| 1个|千元|
| 1个|小行星1090.40|
输出应如上所述
| FK_标识|价格|
| - ------|- ------|
| 1个|十五万六千|
| 1个|二十三万|
| 1个|三十五万九千|
| 1个|六十二万|
| 1个|十一万|
| 1个|九十七|
| 1个|1亿美元|
| 1个|1_090.4000美元|

7eumitmz

7eumitmz1#

set lc_numeric = 'de_DE.UTF-8';

select TO_CHAR(10000000.234, 'FM99G999G999G9999G999G999D0000');
     to_char     
-----------------
 10.000.000,2340

select replace(TO_CHAR(10000000.234, 'FM99G999G999G9999G999G999D0000'), '.', '_');
     replace     
-----------------
 10_000_000,2340

更新fr_FR.UTF-8区域设置。

set lc_numeric = 'fr_FR.UTF-8';

select TO_CHAR(10000000.234, 'FM99G999G999G9999G999G999D0000');
     to_char     
-----------------
 10 000 000,2340

select replace(TO_CHAR(10000000.234, 'FM99G999G999G9999G999G999D0000'), ' ', '_');
     replace     
-----------------
 10_000_000,2340

相关问题