如何在Oracle中将各种VARCHAR作为数字进行比较

JaM*_*ing 3 sql oracle entity-attribute-value

我有一个表格,有各种数字格式,如:

  • 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 = ''.,''')
Run Code Online (Sandbox Code Playgroud)

这些查询适用于上面写的每个数字,除了像9.9E + 37这样的指数数字.我发现用TO_CHAR重写,但它不能用于varchar

有没有人可以比较存储为varchar的各种数字?谢谢

Gor*_*off 9

如果您知道它们都是数字,我建议使用cast():

select cast(col as float)
Run Code Online (Sandbox Code Playgroud)