在Select语句中定义teradata列中的小数位数

亚历克斯·柳

在SAS Enterprise Guide环境中的teradata proc sql中,我试图通过将两个字段相乘来创建一列,但是我一直遇到溢出问题。在选择陈述中如何在结果字段中指定小数位数?数值(20,2)

proc sql exec feedback stimer;

connect to teradata as teravw (authdomain=teradataauth TDPID=DWPROD2 MODE=TERADATA SCHEMA=EDW_NOPHI CONNECTION=GLOBAL);

CREATE TABLE WORK.tbl1 AS
SELECT * from connection to teravw
(SELECT

...
    ,case 
        when PCL.CLM_SOR_CD = '512' then cast(round(sum(PCL.PRCG_WHLSL_ALWBL_COST_AMT * CL.PAID_SRVC_UNIT_CNT) ,0.01) as numeric(20,2))
        else SUM(PCL.PRCG_WHLSL_ALWBL_COST_AMT) 
    end AS WAC 
...

);

disconnect from teravw;
quit;
run;

错误信息:

ERROR: Teradata row not delivered (trget): Numeric overflow occurred during computation.
汤姆

SAS将所有数字存储为8字节浮点数。有效十进制数字的最大数目小于20。您的值是否真的大于9,999,999,999,999.99?您尝试过DECIMAL(15,2)吗?

您可以将值转换为FLOAT,并在SAS端附加格式以仅显示2个小数位。

create table my_dataset as
select wac format=20.2 
from connection to teradata (
   select cast( .... as FLOAT) as wac
   from ...
);

如果确实需要精确存储20个十进制数字,则需要将值分成两个字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章