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

时间:2013-02-25 15:31:52

标签: 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 = ''.,''')

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

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

1 个答案:

答案 0 :(得分:9)

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

select cast(col as float)