Столбец суммы в postgres

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть столбец типа varchar(), значением может быть любая строка, можно ли найти сумму всех строк, которые могут быть преобразованы в числовые?

 value
 ----
| 3  |
| 2 2|
| as |
| a1 |
| !2@|
| 0.5|
 ----
 3.5
  

Ответ №1:

Вы можете использовать case выражение и преобразовать:

 select (case when value ~ '^[0-9] [.]?[0-9]*$'
             then value::numeric
             else 0
        end)
from t;
  

Вот скрипка db<> .

Комментарии:

1. Вы пропустили SUM() .

2. @TheImpaler . . . Я также пропустил, что 0.5 не является целым числом. 😉

Ответ №2:

Может быть:

 with tb as(

select '3' as v union all
select '2 2' as v union all
select 'as' as v union all
select 'a1' as v union all
select '!2' as v union all
select '0.5' 
)


select sum(case when v ~ '^[0-9.] $'
             then v::numeric
             else 0
        end) as result
from tb;