在 Select 语句期间定义 teradata 列中的小数位数
Defining number of decimals in teradata column during Select statement
在 SAS Enterprise Guide 环境中的 teradata proc sql 中,我试图通过将两个字段相乘来创建一个列,但我一直遇到溢出问题。如何在 Select 语句中指定结果字段中的小数位数?数字(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 位十进制数字,那么您需要将该值拆分为两个字段。
在 SAS Enterprise Guide 环境中的 teradata proc sql 中,我试图通过将两个字段相乘来创建一个列,但我一直遇到溢出问题。如何在 Select 语句中指定结果字段中的小数位数?数字(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 位十进制数字,那么您需要将该值拆分为两个字段。