我們正在測試兩組之間的差異,並在UNION/MINUS操作中看到一些違反直覺的行爲。這是什麼解釋?Teradata舍入錯誤,設置操作
如果您僅評估聯盟聲明的第一行(來源 - 目標),則會得到一個不匹配。這是正確的.-有0.000005的差異。
但是,如果您僅評估第二行,則不會返回任何記錄。這意味着Teradata在做Target-Source時將這兩個數字評估爲等同。
此外,當整個聯盟聲明運行時,您會得到2個不匹配!所以它確實認識到Target-Source也不相同。
1 + 0 = 2?即,兩組之間的聯合的基數不應該是基數的總和(忽略重複)。
還有另一個示例。
爲例進行說明:
WITH SOURCE_RESULT(TEST) AS (
SELECT cast(.0296250 as decimal(10,7))
),
TARGET_RESULT(TEST) AS (
SELECT cast(.02962 as decimal(10,5))
)
((SELECT * FROM SOURCE_RESULT) MINUS (SELECT * FROM TARGET_RESULT))
UNION
((SELECT * FROM TARGET_RESULT) MINUS (SELECT * FROM SOURCE_RESULT));
例子2:
WITH SOURCE_RESULT(TEST) AS (
SELECT cast(.0843090 as decimal(10,7))
),
TARGET_RESULT(TEST) AS (
SELECT cast(.08431 as decimal(10,5))
)
((SELECT * FROM SOURCE_RESULT) MINUS (SELECT * FROM TARGET_RESULT))
UNION
((SELECT * FROM TARGET_RESULT) MINUS (SELECT * FROM SOURCE_RESULT));
」第一個SELECT語句中包含的數據類型,標題和格式子句確定出現在最終結果中的數據類型,標題和格式信息。「 見 http://www.info.teradata.com/HTMLPubs/DB_TTU_15_10/index.html#page/SQL_Reference/B035_1145_151K/attributes_of_a_set_result_ATTRIBUTES_SET_RESULT.html – dnoeth
@dnoeth:非常好,在一組操作中的第一組確定模式。說得通。但是,它不是真的四捨五入嗎?它只是超過了5位十進制數字。其他方面,.00005應該圍起來,讓它們不同。 – foursuits
Teradata支持兩種四捨五入方法,「圓到半到圓」和「從零開始圓整」,http://en.wikipedia.org/wiki/Rounding您的系統設置爲#1:http:// www。 info.teradata.com/HTMLPubs/DB_TTU_15_10/SQL_Reference/B035_1143_151K/Numeric_Types.031.64.html – dnoeth