如何计算具有“字符串”值的列

时间:2012-05-07 16:09:50

标签: oracle

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

1 个答案:

答案 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的设计需要重新考虑。