Database 如何使用DB2SQL将DECFLOAT更改为INT?
简单地说,我正试图摆脱数据库中所有这些DECFLOAT类型,因为许多报告工具(如Tableau)不想使用它们。我是DB2新手,在网上找到了很多关于任何数据类型->DECFLOAT的文献,但是关于从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转换为整数,事实上,您可以实现以下任意转换: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.