我需要在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,但它给出了以下错误:
Run Code Online (Sandbox Code Playgroud)ERROR: invalid input syntax for type numeric: "" ********** Error ********** ERROR: invalid input syntax for type numeric: "" SQL state: 22P02
值得注意的是,我已经完成了一些单元测试,当我为Mortgage运行此查询并删除贷款行时,它运行正常.我已经分离出的问题conversion_units::numeric的Loans.除了通常的转换(我在这里指定),我不知道还有什么可以尝试.我通过这个错误阅读了这些问题,但它们似乎并没有反映我的问题.任何帮助表示赞赏!谢谢!
显然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)