Postgres SQL状态:22P02

时间:2015-06-29 19:23:19

标签: 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;

尽管将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。除了通常的转换(我在这里指定),我不知道还有什么可以尝试。我通过这个错误阅读了这些问题,但它们似乎并没有反映我的问题。任何帮助表示赞赏!谢谢!

3 个答案:

答案 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文件中的顺序必须与复制文本中的列名称相同。