#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;