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

时间:2015-05-18 08:52:40

标签: sql 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)

2 个答案:

答案 0 :(得分:1)

这取决于您的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存储的内部格式可能不是。在DB2 for IBM i上,至少TS字段的内部存储格式需要7到13个字节,具体取决于精度。

  • 时间戳(0) - > 7个字节
  • 时间戳(6) - > 10个字节(默认)
  • 时间戳(12) - > 13个字节

答案 1 :(得分:0)

由于您将10称为长度,我将假设您正在查看SYSIBM.SYSCOLUMNS(或目录中的其他等效表格。

目录中的LENGTH列指的是字段的内部长度。您可以使用以下公式计算:

FLOOR( ((p+1)/2) + x )
  • p是时间戳的精度(小数点后的位数[微秒])
  • x对于没有时区的时间戳为7,如果有时区则为9(如果您的平台支持)

如果要比较SQLCA中的字段,该字段将是时间戳的字符表示的长度。有关这两个字段之间的解释,请参阅this Information Center article

如果您确实想要更改时间戳字段的比例,则可以使用以下语句。 x应该是秒位置小数点后位数的整数。

允许的小数位数因平台和版本而异。如果您使用的是旧版本,则可能无法更改比例,即设置为6.但是,某些较新的平台(如z / OS 10 +,LUW 9.7+)将允许您设置比例为0到12(含)之间的数字。

ALTER TABLE SESSION.TSTAMP_TEST 
ALTER COLUMN tstamp 
SET DATA TYPE TIMESTAMP(x);