Kuljeet Keshav Asked: 2018-09-22 09:16:16 +0800 CST2018-09-22 09:16:16 +0800 CST 2018-09-22 09:16:16 +0800 CST EXCEL 和 TERADATA SQL 中的不同计算 772 Teradata SqL 中的计算select (75/979.86)*979.86得出 78.3888。在 excel 中,它会简单地给出 75,这在逻辑上是正确的。我知道 SQL 将 75/979.86 四舍五入为 0.08,即 979.86 中的小数位数。因此结果是不同的。所以,我可以简单地做 (75*979.86)/979.86 而不是得到结果。但是有没有办法通过改变数据类型或四舍五入来精确匹配这些? teradata excel 2 个回答 Voted Best Answer dnoeth 2018-09-22T11:33:43+08:002018-09-22T11:33:43+08:00 Teradata 在每次计算后基于结果数据类型(符合标准 SQL)进行舍入,为了获得预期的结果,您可以将第一个操作数转换为数字(无需考虑精度),最后返回到 DECIMAL: Cast((Cast(75 AS NUMBER)/979.86) *979.86 AS DECIMAL(10,2)) 或者你重新安排计算顺序先乘后除: 979.86 * 75 / 979.86 Kuljeet Keshav 2018-09-22T09:43:45+08:002018-09-22T09:43:45+08:00 所以,这就是我所做的。我们可以使用 cast as( number as decimal(18,5)) 之类的东西将数字的数据类型转换为具有 5 个十进制数字。然后,再次使用 cast 作为我们需要将结果四舍五入的小数位数,在我的例子中是 2。所以,像这样 select cast((cast(75 as decimal(18,5))/cast(979.86 as decimal(18,5)))*cast(979.86 as decimal(18,5)) as decimal(18,2)) ; 我们可以根据需要增加小数位数以提高精度,但也应注意“数字溢出”错误
Teradata 在每次计算后基于结果数据类型(符合标准 SQL)进行舍入,为了获得预期的结果,您可以将第一个操作数转换为数字(无需考虑精度),最后返回到 DECIMAL:
或者你重新安排计算顺序先乘后除:
所以,这就是我所做的。我们可以使用 cast as( number as decimal(18,5)) 之类的东西将数字的数据类型转换为具有 5 个十进制数字。然后,再次使用 cast 作为我们需要将结果四舍五入的小数位数,在我的例子中是 2。所以,像这样
select cast((cast(75 as decimal(18,5))/cast(979.86 as decimal(18,5)))*cast(979.86 as decimal(18,5)) as decimal(18,2)) ;
我们可以根据需要增加小数位数以提高精度,但也应注意“数字溢出”错误