Sql Oracle:将字符串转换为双精度

Sql Oracle:将字符串转换为双精度,sql,vb.net,oracle,Sql,Vb.net,Oracle,这是我对数据库拉取的查询: SELECT DISTINCT TEMPLATE_GROUP_PROPERTIES.PROPERTYTYPE, PROPERTY.PROPERTYVAL FROM TEMPLATE_GROUP_PROPERTIES LEFT OUTER JOIN PROPERTY_DATA ON (TEMPLATE_GROUP_PROPERTIES.PROPERTYGROUPID = PROPERTYDATA.PROPERTYGROUPID) WHERE PROPERTY.PR

这是我对数据库拉取的查询:

SELECT DISTINCT
TEMPLATE_GROUP_PROPERTIES.PROPERTYTYPE,
PROPERTY.PROPERTYVAL

FROM
TEMPLATE_GROUP_PROPERTIES

LEFT OUTER JOIN PROPERTY_DATA
ON (TEMPLATE_GROUP_PROPERTIES.PROPERTYGROUPID = PROPERTYDATA.PROPERTYGROUPID)

WHERE
PROPERTY.PROPERTYVAL = :propValue

创建数据库的人将
Property.Propertyval
列定义为字符串,表示为科学符号数字(4.0E-3、2.0E2等)。我需要将字符串转换为double,或者将double转换为字符串,但我不知道如何转换。我尝试过使用
TO_NUMBER()
函数,但迄今为止没有找到任何帮助。

如果您确实知道字符串是有效数字,请使用
cast()

一些警告

首先,使用该函数将阻止查询使用
propertyval
上的索引。如果需要索引,则始终可以创建函数索引

其次,当浮点值非常接近时,比较浮点值可能会有问题。你可以考虑:

WHERE abs(cast(property.propertyval as float) - :propValue) < 0.001
其中abs(cast(property.propertyval as float)-(propValue)<0.001

或者其他阈值。

@bbesse。在第二种情况下,不是寻找精确匹配,而是寻找两个非常接近的值(小于阈值)。这是因为两个浮点数可能看起来相同,但在最后一位上不同,并且不同。
WHERE abs(cast(property.propertyval as float) - :propValue) < 0.001