【问题标题】:PGSQL - No function matches the given name and argument types. You might need to add explicit type castsPGSQL - 没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换
【发布时间】:2017-07-12 04:48:30
【问题描述】:

此代码给出错误。我看过类似类型的问题,但找不到答案。

sum(COALESCE(((rpt.report_target_data::json->>'itemQuantity')::int)::int),0) as itemQuantity,

report_target_data 是一个 json 对象,“itemQuantity”是该 json 的一个元素。有时该字段包含一个空值。因此,当我尝试获取总和时,它会出现错误,因为如果列有空值,postgres 无法获得总和。上面的代码有什么问题。有没有办法绕过这件事?即使某些行包含空值,有没有办法计算总和?

这是上面代码的错误->

没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

【问题讨论】:

  • 您将0 作为第二个参数传递给sum()。您可能打算将其传递给COALESCE()
  • 非常感谢。 COALESCE 将为空值分配一个默认值。有没有办法为空字符串(“”)分配默认值?@NickBarnes
  • coalesce(nullif(your_value,''),0)

标签: json postgresql stored-procedures casting


【解决方案1】:

就我而言,这不是 COALESCE 问题,但我最终遇到了这个问题。

我注意到我的列值是字符(varchar 类型),所以我所做的是:

select sum(cast(num_suf as int)) as total  from results; 

以防万一有人再次遇到这个问题:)

【讨论】:

  • 从不,永远将数字存储在varchar 列中。只是不要。您应该立即修复损坏的数据模型。
  • @a_horse_with_no_name 完全正确。我正在从文件中导入数据,唯一的工作方法是在所有字段中使用 varchar。我应该在导入数据后立即将其转换为数字。我的错。
猜你喜欢
  • 2021-02-05
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多