【发布时间】:2012-11-09 03:17:08
【问题描述】:
使用 Teradata 数据库,可以通过 Java 将 NaN、-Inf 和 +Inf 的值加载到 FLOAT 列中。不幸的是,一旦这些值进入表中,在编写需要过滤掉它们的 SQL 时就会变得很困难。没有 IsNaN() 函数,您也不能“CAST ('NaN' as FLOAT)”并使用相等比较。
我想做的是,
SELECT
SUM(VAL**2)
FROM
DTM
WHERE
NOT ABS(VAL) > 1e+21 AND
NOT VAL = CAST ('NaN' AS FLOAT)
但失败并出现错误 2620,“格式或数据包含错误字符。”,特别是在 CAST 上。我尝试了简单的“... AND NOT VAL = 'NaN'”,它也因类似原因而失败(3535,“字符串转换为数值失败。”)。我似乎无法弄清楚如何在 SQL 语句中表示 NaN。即使我可以在 SQL 语句中成功表示 NaN,我也会担心比较会失败。根据 IEEE 754 规范,NaN = NaN 应该评估为假。我真正需要的是一个 IsNaN() 函数。然而这个功能似乎并不存在。
【问题讨论】: