使用 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() 函数。然而,该功能似乎并不存在。