PostgreSQL中Money类型转Double/BigInt适配Google Data Studio
当然可以搞定这个问题!不过得先纠正一个小误区:PostgreSQL里并没有todouble()这个函数,我们得用它原生的类型转换方式来处理money字段,完美适配Google Data Studio的要求。
转换money类型为double precision
money类型本质上是带格式的精确数值,我们可以先把它转成numeric(精确数值类型),再转成double precision——这是Google Data Studio支持的类型:
- 用PostgreSQL简洁的
::类型转换操作符:SELECT maintenance.cost::numeric::double precision FROM maintenance; - 用标准SQL的
CAST()函数写法(兼容性更好):SELECT CAST(CAST(maintenance.cost AS numeric) AS double precision) FROM maintenance;
转换money类型为bigint
如果需要转成整数类型bigint,因为money通常带有小数部分(比如分、角),你得先处理小数部分再转换,根据业务需求选下面的方式:
- 四舍五入到最近整数:
SELECT ROUND(maintenance.cost::numeric)::bigint FROM maintenance; - 向下取整(直接截断小数部分):
SELECT FLOOR(maintenance.cost::numeric)::bigint FROM maintenance; - 向上取整:
SELECT CEIL(maintenance.cost::numeric)::bigint FROM maintenance;
几个关键注意事项
- 精度问题:
double precision是浮点数,可能会有微小的精度损失。如果你的业务需要精确的货币计算,建议先转成numeric类型再导入Data Studio——其实Data Studio是支持numeric的,只是如果你必须用double或bigint,就按上面的方法来。 - 本地化格式不用愁:不用担心money字段里的货币符号、千分位分隔符,PostgreSQL内部存储money时是保留纯数值的,直接转
numeric会自动忽略这些格式字符,不会出现转换错误。
内容的提问来源于stack exchange,提问作者fahmiduldul




