繁体   English   中英

如何在DB2中更改时间戳列的大小?

[英]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个字节。

  • 时间戳记(0)-> 7个字节
  • 时间戳记(6)-> 10字节(默认)
  • 时间戳记(12)-> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM