Database 如何使用DB2SQL将DECFLOAT更改为INT?

Database 如何使用DB2SQL将DECFLOAT更改为INT?,database,db2,db2-luw,Database,Db2,Db2 Luw,简单地说,我正试图摆脱数据库中所有这些DECFLOAT类型,因为许多报告工具(如Tableau)不想使用它们。我是DB2新手,在网上找到了很多关于任何数据类型->DECFLOAT的文献,但是关于从DECFLOAT->INT的内容没有什么实质性的内容 这可能吗?有什么建议吗 支持将DECFLOAT转换为整数,事实上,您可以实现以下任意转换:SMALLINT、integer、BIGINT、DECIMAL、DECFLOAT、REAL、DOUBLE、CHAR、VARCHAR(取决于数据,例如SMALLI

简单地说,我正试图摆脱数据库中所有这些DECFLOAT类型,因为许多报告工具(如Tableau)不想使用它们。我是DB2新手,在网上找到了很多关于任何数据类型->DECFLOAT的文献,但是关于从DECFLOAT->INT的内容没有什么实质性的内容


这可能吗?有什么建议吗

支持将DECFLOAT转换为整数,事实上,您可以实现以下任意转换:SMALLINT、integer、BIGINT、DECIMAL、DECFLOAT、REAL、DOUBLE、CHAR、VARCHAR(取决于数据,例如SMALLINT的大小有限制)

但为什么要将表列更改为整数?为什么不改为十进制呢?或者,不要修改表以适应BI产品,而是使用转换为十进制的视图。还可以通过视图控制舍入


虽然今天的BI工具可能存在此数据类型的问题,但该数据类型基于标准EEE754r,在BI工具的未来版本中,问题可能会更小。可能在更改任何表格之前阅读。

我同意@Used_by_的观点,即您最好更新BI工具,使其能够与
DECFLOAT
一起工作,或者使用
VIEW
s动态转换为
INT
DECIMAL
(甚至
FLOAT
!?)

但是,如果确实要更改现有表的数据类型,可以这样做(有一些限制),如下例所示

create table df(df decfloat(16) not null primary key) organize by row;
insert into df values 1.0, 2.00, 3.120;
select * from df;
给予

然后

返回

SQL0478N  The statement failed because one or more dependencies exist on the 
target object.  Target object type: "COLUMN". Name of an object that is 
dependent on the target object: "SQL180924130131030". Type of object that is 
dependent on the target object: "PRIMARY KEY".  SQLSTATE=42893
所以

然后

给予

但是

由于reorg挂起而失败

SQL0668N  Operation not allowed for reason code "7" on table "PAUL.DF".  
SQLSTATE=57016
所以

给予


大约一周前我浏览了这些文章,但你是对的,我对INT没有特别的需求,我只知道DECFLOAT的格式是一个数字字符串,我认为这是最容易开始的。另外,很抱歉不清楚,但这是为BI工具创建的视图。我以前从未遇到过DECFLOAT,而且我对DB2还相当陌生,所以我想知道在运行CAST之类的操作时,是否会出现任何预期的数据丢失或类似的情况。实数、双精度或十进制可能是更好的选择,因为它们支持不同精度的小数部分。注意。我建议为BI使用提供视图以避免困难。
SQL0478N  The statement failed because one or more dependencies exist on the 
target object.  Target object type: "COLUMN". Name of an object that is 
dependent on the target object: "SQL180924130131030". Type of object that is 
dependent on the target object: "PRIMARY KEY".  SQLSTATE=42893
alter table df drop primary key;
alter table df alter column df set data type integer;
select * from df
DF         
-----------
          1
          2
          3

  3 record(s) selected.
insert into df values 4
SQL0668N  Operation not allowed for reason code "7" on table "PAUL.DF".  
SQLSTATE=57016
call admin_cmd('reorg table df');
insert into df values 4;
alter table df add primary key (df);
select * from df;
DF         
-----------
          1
          2
          3
          4

  4 record(s) selected.