1

to_number 関数を使用して varchar 列を数値に変換したいのですが、Oracle が SQL を実行しようとする順序を理解するのに苦労しています。

ステートメントは次のようになります。

select * from table where column is not null and to_number(column, '999.9') > 20

Oracle がこれを実行すると、無効な番号の例外がスローされます。Oracle がある種の関係代数式を使用して SQL ステートメントを最適化したことは理解していますが、to_number 演算子を安全に使用して目標を達成する方法を教えてもらえますか?

4

1 に答える 1

3

to_number 演算子を安全に使用して目標を達成する方法を教えてもらえますか?

残念ながら、適用する前に、数値以外のデータを含む行を何らかの方法で除外する必要がありますto_number。変換関数自体は「安全ではありません」。そうする場合、単一の無効な入力でクエリ全体がクラッシュします。

于 2013-07-19T07:15:53.973 に答える