[英]How to change timestamp column size in DB2?
知道如何更改DB2中的timestamp
列大小吗?
我尝试更改表,删除然后创建表。 两者都不起作用。
这是我尝试过的查询:
alter table clnt_notes alter column lupd_ts set data type timestamp(26)
create table CLNT_NOTES
(NOTE_ID int not null generated always as identity (start with 1, increment by 1),
CLNT_ID varchar(10) not null,
TX varchar(200),
LUPD_TS timestamp(26) not null)
这取决于您的DB2平台和版本。 过去,DB2中的时间戳在小数秒部分都具有6位精度。 字符串形式的“ YYYY-MM-DD-HH:MM:SS.000000”
但是,对于小数秒部分,DB2 LUW 10.5和DB2 for IBM i 7.2支持从0到12位的精度。 以字符串形式,您可以使用“ YYYY-MM-DD-HH:MM:SS”到“ YYYY-MM-DD-HH:MM:SS.000000000000”。
默认精度为6,因此,如果指定不带精度(长度)的时间戳,则将获得六位数的精度。 否则,您可以将精度指定为o到12。
create table mytable (
ts0 timestamp(0)
, ts6 timestamp
, ts6_also timestamp(6)
, ts12 timestamp(12)
);
但是请注意,尽管外部(并非完全是字符串)格式,DBMS表面可能会在19到32字节之间变化。 TS的内部格式可能不会存储。 在IBM i的DB2上,根据精度,至少TS字段的内部存储格式占用7到13个字节。
由于您将长度指定为10
,因此我假设您正在查找SYSIBM.SYSCOLUMNS
(或目录中的另一个等效表)。
目录中的LENGTH
列是指字段的内部长度。 您可以使用以下公式进行计算:
FLOOR( ((p+1)/2) + x )
p
是时间戳的精度(小数点后的位数[微秒]) x
为7;如果具有时区,则x
为9(如果您的平台支持) 如果您将比较与SQLCA
中的字段,则该字段将是时间戳记的字符表示形式的长度。 有关这两个字段的说明,请参阅此信息中心文章 。
如果您确实要更改时间戳字段的小数位数,则可以使用以下语句。 x
应该是整数,表示秒位置小数点后的位数。
允许的小数位数取决于平台和版本。 如果您使用的是旧版本,则可能无法更改缩放比例,该比例设置为6。但是,某些较新的平台(如z / OS 10 +,LUW 9.7+)将允许您设置缩放比例到0到12(含)之间的数字。
ALTER TABLE SESSION.TSTAMP_TEST
ALTER COLUMN tstamp
SET DATA TYPE TIMESTAMP(x);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.