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

Sql 在Select语句期间定义teradata列中的小数位数,sql,sas,teradata,Sql,Sas,Teradata,在SAS Enterprise guide环境中的teradata proc sql中,我试图通过将两个字段相乘来创建一个列,但一直存在溢出问题。如何在Select语句中指定结果字段中的小数位数?数字(20,2) 错误消息: ERROR: Teradata row not delivered (trget): Numeric overflow occurred during computation. SAS将所有数字存储为8字节浮点数。有效小数位数的最大值小于20。您的值是否真的大于99999

在SAS Enterprise guide环境中的teradata proc sql中,我试图通过将两个字段相乘来创建一个列,但一直存在溢出问题。如何在Select语句中指定结果字段中的小数位数?数字(20,2)

错误消息:

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

SAS将所有数字存储为8字节浮点数。有效小数位数的最大值小于20。您的值是否真的大于999999999.99?你试过十进制(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位十进制数字,则需要将值拆分为两个字段。

如果没有有关基础列数据类型的信息,很难确定,但很可能需要在SUMIs内部强制转换SAS错误或TERADATA错误?这是SAS错误。如果SELECT语句返回的内容无法放入SAS数据类型,则会发生此错误。正如@Fred所建议的,它需要对返回的数据进行一些类型转换/转换。20位有效的十进制数字超过SAS在8字节IEEE浮点值中存储的数字。为什么不直接将值转换为FLOAT并返回它呢?
create table my_dataset as
select wac format=20.2 
from connection to teradata (
   select cast( .... as FLOAT) as wac
   from ...
);