知道如何在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)
答案 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个字节,具体取决于精度。
答案 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);