1

我的查询有问题我有一个表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 中执行此操作?

4

1 回答 1

4

您可以创建一个函数,将字符串转换为数字或返回 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需要重新考虑的设计。

于 2012-05-07T16:16:09.557 回答