3

次のようなさまざまな数値形式のテーブルがあります。

  • 2
  • 3.44189
  • 4,1
  • -0.0022
  • 9.9E+37
  • 1.9E-12

これらは varchar2 列の測定値であり、各測定値には上限値と下限値 (同じ形式) の仕様があるため、これらの境界線の間の測定値が必要です

SELECT VALUE, LOW, HIGH FROM MEASUREMENTS
WHERE to_number(replace(VALUE,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')
    > to_number(replace(LOW,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')
AND   to_number(replace(VALUE,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''') 
    <=to_number(replace(HIGH,',','.'), '999999999D99999999999999999999999999999999999999','NLS_NUMERIC_CHARACTERS = ''.,''')

これらのクエリは、9.9E+37 のような指数を除いて、上記のすべての数値に対して機能します。TO_CHAR での書き換えを見つけましたが、varchar では機能しません

varchar として保存されているさまざまな数値を互いに比較する解決策はありますか? どうも

4

1 に答える 1

9

それらがすべて数字であることがわかっている場合は、次を使用することをお勧めしcast()ます。

select cast(col as float)
于 2013-02-25T15:36:30.900 に答える