• ベストアンサー

0の除算

PostgreSQLのSQL文で0の割り算だと計算をしないで, 0やNullを返すようなSQL文を作りたいのですが, 分かりますか? 例えば select field0, ( field1 / field2 ) as result; だと「field2」が0の場合エラーがでてしまいます。 field0は出力したいのでWhere文で Where field2 <> 0 は使えません。 オラクルではdecodeという関数が使えるようですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

PostgreSQLでは、CASE式が使えます。 例) ---------------------------------------------- SELECT CASE WHEN field2 = 0 THEN NULL ELSE field1 / field2 END AS result FROM table1; -------------------------------------------------- バージョンは、少なくとも7.0以降であれば使えると思います。

参考URL:
http://www.postgresql.jp/document/pg743doc/html/functions-conditional.html
lord_chan
質問者

補足

ありがとうございました。できました。

その他の回答 (1)

  • siteuma
  • ベストアンサー率28% (77/271)
回答No.1

Postgreは自分ではあまり使ったことが無いので、 ちょっと自身が無いのですが、確かCASEが使えたかと。 select field0, case field2=0 then null else (field1 / field2) end as result from table; こんなところ?

lord_chan
質問者

お礼

ありがとうございました,が,残念ながらcase elseは使えませんでした。 とりあえずストアドで CREATE OR REPLACE FUNCTION plfnc_0ToNull( double precision, double precision ) RETURNS TEXT AS ' DECLARE pf0 ALIAS FOR $1; pf1 ALIAS FOR $2; BEGIN IF pf1 <> 0 THEN ELSE return null; END IF; return pf0 / pf1; END; ' LANGUAGE 'plpgsql'; を作り select plfnc_0ToNull(1,0); で,対応しました。

関連するQ&A