使用Teradata數據庫,可以通過Java將NaN,-Inf和+ Inf的值加載到FLOAT列中。不幸的是,一旦這些值進入表格,編寫需要將它們過濾掉的SQL就會讓生活變得困難。沒有IsNaN()函數,也不能「CAST('NaN'作爲FLOAT)」並使用相等比較。如何過濾Teradata SQL中的NaN 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應評估爲false。我真的需要的是一個IsNaN()函數。然而,這個功能似乎並不存在。