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 に答える