高级SQL - 基于表中的值我想做计算

时间:2018-06-09 03:38:48

标签: sql oracle

这是一种情况,例如,请查看下表中的内容

create table cast_ex(nearly_number varchar2(20));

insert into cast_ex values('10');
insert into cast_ex values('20');
insert into cast_ex values('thirty');
insert into cast_ex values('FORTY');
insert into cast_ex values('Fifty[50])');
insert into cast_ex values('60');

commit;

我想将列near_number完全为整数的所有值相加。在这种情况下,我想总和10,20,60。其他行不被考虑,因为它们不包含整数值(即,它们包含0到9之间的字符)

期望的输出:

   SUM_INT
----------
        90

4 个答案:

答案 0 :(得分:1)

使用replay检查replay是否仅包含从开头到结尾的数字,使用REGEXP_LIKE() POSIX类过滤来自NEARLY_NUMBER的行,然后使用{ {1}}和[:digit:]

CAST_EX

答案 1 :(得分:1)

您需要获取满足整数子句的行
1)翻译&替换将删除除整数之外的所有内容
2)如果剩余的是NULL,则原始字符串必须是整数
3)将其转换为数字&得到SUM。

[ControlDefinition("table[.//h2[contains(@id, 'WorkflowHeader')]]", ComponentTypeName = "table")]

答案 2 :(得分:1)

(需要Oracle 12.2或更高版本:)

select sum(to_number(nearly_number default 0 on conversion error)) as sum_int
from   cast_ex
where  mod(to_number(nearly_number default 0 on conversion error),1) = 0;

或尽量减少显式转化次数

select sum(int_value) as sum_int
from   ( select to_number(nearly_number default 0 on conversion error) as int_value
         from   cast_ex )
where  mod(int_value,1) = 0;

答案 3 :(得分:-1)

根据您的问题,您的答案如下:

select sum(cast(VALUE AS INTEGER)) from example where ISNUMERIC(value) = 1