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 回答