Postgres SQL状态:22P02

use*_*355 6 postgresql

我需要在Postgres中运行以下查询:

select left(file_date, 10) as date, lob_name, devicesegment, sum(conversion_units::numeric) as units
from bac_search.dash_search_data
where (lob_name= 'Mortgage' and file_date::date between (CURRENT_DATE - INTERVAL '30 days') and CURRENT_DATE)
      or (lob_name= 'Loans' and file_date::date between (CURRENT_DATE - INTERVAL '30 days') and CURRENT_DATE)
group by file_date, lob_name, devicesegment
order by file_date, lob_name, devicesegment;
Run Code Online (Sandbox Code Playgroud)

尽管将conversion_units设置为numeric,但它给出了以下错误:

ERROR:  invalid input syntax for type numeric: ""
********** Error **********

ERROR: invalid input syntax for type numeric: ""
SQL state: 22P02
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我已经完成了一些单元测试,当我为Mortgage运行此查询并删除贷款行时,它运行正常.我已经分离出的问题conversion_units::numericLoans.除了通常的转换(我在这里指定),我不知道还有什么可以尝试.我通过这个错误阅读了这些问题,但它们似乎并没有反映我的问题.任何帮助表示赞赏!谢谢!

Qua*_*noi 9

显然conversion_units是一个字符串,可以保存不可转换的值numeric.

你可以通过这种方式立即解决问题:

SUM(NULLIF(conversion_units, '')::numeric)
Run Code Online (Sandbox Code Playgroud)

但也可能有其他价值观.

您可以尝试使用regexp来匹配可转换字符串:

SUM((CASE WHEN conversion_units ~ E'^\\d(?:\\.\\d)*$' THEN conversion_units END)::numeric)
Run Code Online (Sandbox Code Playgroud)