我需要在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;
尽管将conversion_units设置为numeric,但却给出了以下错误:
ERROR: invalid input syntax for type numeric: "" ********** Error ********** ERROR: invalid input syntax for type numeric: "" SQL state: 22P02
值得注意的是,我已经完成了一些单元测试,当我为Mortgage运行此查询并删除贷款行时,它运行正常。我已将conversion_units::numeric
的问题隔离到Loans
。除了通常的转换(我在这里指定),我不知道还有什么可以尝试。我通过这个错误阅读了这些问题,但它们似乎并没有反映我的问题。任何帮助表示赞赏!谢谢!
答案 0 :(得分:6)
显然conversion_units
是一个字符串,可以保存不可转换为numeric
的值。
你可以通过这种方式立即解决问题:
SUM(NULLIF(conversion_units, '')::numeric)
但可以有其他值。
您可能会尝试使用regexp来匹配可转换字符串:
SUM((CASE WHEN conversion_units ~ E'^\\d(?:\\.\\d)*$' THEN conversion_units END)::numeric)
答案 1 :(得分:1)
对于将来的搜索者:
尝试从csv导入数据时遇到此错误(Postgres SQL状态:22P02)。
使用以下命令:
COPY my_end_table 通过CSV从'D:\ check \ sample.csv'
解决方案:原来csv中不应包含标头。...
答案 2 :(得分:0)
csv
中“订单”栏中的问题。
csv
文件中的顺序必须与复制文本中的列名称相同。