sql - Teradata 中的 DECIMAL 类型

标签 sql type-conversion teradata

谁能解释一下我在 Teradata 中得到的以下结果:

SELECT TYPE(CAST (2.3 AS DECIMAL(18,4)) * CAST (2.3 AS DECIMAL(18,4))  )

结果是:

DECIMAL(18,8)

我期待 DECIMAL(18,4)

最佳答案

关于涉及小数的计算,每个 DBMS 都有自己的规则。

Teradata 的基本规则是: 当您添加/减去/除 DECIMAL 时,得到的小数精度是两个操作数中较大的一个,例如dec(10,2) + dec(10,4) = dec(xx,4)

但是当你乘以小数位数时,例如 dec(10,2) * dec(10,4) = dec(xx,6)

整体精度有一些更多的规则(一些取决于 dbscontrol MAXDecimal 设置)。

然后是最重要的规则,人们往往会忘记: 每次计算后,结果都会四舍五入到此精度。

sel 2.0/3.00 * 100, 100*2.0/3.00;

    *** Query completed. One row found. 2 columns returned.
    *** Total elapsed time was 1 second.

 ((2.0/3.00)*100)   ((100*2.0)/3.00)
-----------------  -----------------
            67.00              66.67

节食者

关于sql - Teradata 中的 DECIMAL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574015/

相关文章:

c# - 如何将数据从 ASP.Net 插入到 MS SQL Server?

mysql - 如何根据存储在列中的json对象的json键对mysql结果进行排序

c - ANSI-C : maximum number of characters printing a decimal int

java - 如何在Java中将txt文件转换为数组,以便我可以单独处理每个数组

c++ - 小数除法

teradata - 如何在 Teradata 中将纪元时间转换为人类可读

sql 逻辑 A 和(B 或 C)

在 Teradata Ansi session 模式下提交

linux - 在 Linux 上运行 teradata 查询

sql - rake 数据库 :migrate securely on staging and production environments