You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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的,只是如果你必须用doublebigint,就按上面的方法来。
  • 本地化格式不用愁:不用担心money字段里的货币符号、千分位分隔符,PostgreSQL内部存储money时是保留纯数值的,直接转numeric会自动忽略这些格式字符,不会出现转换错误。

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

火山引擎 最新活动