Sql 在Select语句期间定义teradata列中的小数位数
在SAS Enterprise guide环境中的teradata proc sql中,我试图通过将两个字段相乘来创建一个列,但一直存在溢出问题。如何在Select语句中指定结果字段中的小数位数?数字(20,2) 错误消息: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
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 ...
);