我的查询存在问题,我有一个表newtable
并插入了值:
create table newtable(
col1 varchar2(3),
col2 varchar2(3),
col3 varchar2(3),
col4 varchar2(3),
col5 varchar2(3)
)
insert into newtable values(5,'m','q',4,3);
我想将列中只包含数字的值加在一起。在这种情况下,我希望结果为12(5 + 4 + 3)。
在Excel中,我会使用countif
函数执行类似的操作。我如何在Oracle中执行此操作?
答案 0 :(得分:3)
您可以创建一个函数,将字符串转换为数字或返回0并在每列上使用该函数
SQL> ed
Wrote file afiedt.buf
1 create or replace function my_to_number( p_str in varchar2 )
2 return number
3 is
4 l_num number;
5 begin
6 l_num := to_number( p_str );
7 return l_num;
8 exception
9 when others then
10 return 0;
11* end;
SQL> /
Function created.
SQL> select my_to_number(col1) +
2 my_to_number(col2) +
3 my_to_number(col3) +
4 my_to_number(col4) +
5 my_to_number(col5)
6 from newtable;
MY_TO_NUMBER(COL1)+MY_TO_NUMBER(COL2)+MY_TO_NUMBER(COL3)+MY_TO_NUMBER(COL4)+MY_T
--------------------------------------------------------------------------------
12
然而,在关系数据库中,当您想要将数据作为数字处理时,将数字数据存储在varchar2
列中时,设计数据模型几乎肯定是错误的。将数字加在一起。设计数据模型几乎肯定是错误的,其中特定列有时会存储数值并且有时存储字符串。所以我特别担心newtable
的设计需要重新考虑。