2015-06-29 2 views
0

мне нужно выполнить следующий запрос в Postgres:Postgres SQL состояние: 22P02

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 в цифровой, он дает мне следующую ошибку:

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

ERROR: invalid input syntax for type numeric: "" 
SQL state: 22P02 

записки, я «Проделали некоторые модульные тесты, и когда я запускаю этот запрос для Mortgage и удаляю линию для займов, она работает нормально. Я выделил проблему до conversion_units::numeric для Loans. Помимо обычного преобразования (как я указал здесь), я не уверен, что еще попробовать. Я прочитал вопросы с этой ошибкой, но они, похоже, не отражают мою проблему. Любая помощь приветствуется! Благодаря!

ответ

1

По-видимому conversion_units - это строка, которая может хранить значения, не конвертируемые в numeric.

Вы немедленная проблема может быть решена следующим образом:

SUM(NULLIF(conversion_units, '')::numeric) 

, но может быть и другими значениями.

Вы могли бы попытаться использовать регулярное выражение, чтобы соответствовать конвертируемые строки:

SUM((CASE WHEN conversion_units ~ E'^\\d(?:\\.\\d)*$' THEN conversion_units END)::numeric) 
Смежные вопросы