You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres如何使用cash_words函数实现印度货币格式的数字转文字

解决方案

前置校验

  • 首先确认操作系统已安装en_IN.UTF-8 locale,执行系统命令locale -a | grep en_IN验证,无输出的话需要先生成对应语言包再调整数据库配置。

1. 修正cash_words的参数传入逻辑与lc_monetary生效范围

cash_words直接传入字符串/数值时会触发默认的美元格式化逻辑,不会读取lc_monetary配置,需先将输入值显式转换为money类型:

-- 会话级临时生效货币区域配置
SET lc_monetary = 'en_IN.UTF-8';
-- 正确调用方式
SELECT cash_words('100'::money);

此时输出结果会变为one hundred rupees and zero cents。
如果需要永久生效lc_monetary配置,可选择以下任意一种方式:

  • 修改postgresql.conf配置文件,添加lc_monetary = 'en_IN.UTF-8',修改后执行SELECT pg_reload_conf();重载配置实现全局生效
  • 仅针对当前数据库生效:ALTER DATABASE 你的数据库名称 SET lc_monetary = 'en_IN.UTF-8';
  • 仅针对指定用户生效:ALTER ROLE 你的用户名 SET lc_monetary = 'en_IN.UTF-8';

2. 去除零分后缀

PostgreSQL 12及以上版本支持cash_words_show_cents参数控制是否输出分的部分:

  • 会话级临时生效:SET cash_words_show_cents = off;,设置后调用cash_words('100'::money)会直接输出one hundred rupees
  • 永久生效方式同上述lc_monetary的配置逻辑,将参数名替换为cash_words_show_cents即可。

3. 低版本兼容方案

如果使用PostgreSQL 12以下不支持cash_words_show_cents的版本,可通过字符串替换直接处理输出结果:

SELECT regexp_replace(cash_words('100'::money), ' and zero cents$', '');

内容的提问来源于stack exchange,提问作者newdis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:15:03