时间戳记
时间戳是一个由六或七个部分组成的数值(年、月、日、时、分、秒和可选的毫秒数),可选时区说明,表示日期和时间。
时间戳值的时间部分可以包含小数秒的规格。 小数秒部分的位数使用0-12范围内的属性指定,默认值为6。 时区是指当地时间与UTC之间的时差。 时差范围为-12至14,分差范围为00至59。 可选时区以±th:tm格式指定,取值范围为-12:59至+14:00。 时间戳数据类型包括不带时区的TIMESTAMP(一般称为TIMESTAMP)和带时区的TIMESTAMP。
无时区时间戳
时间戳的内部表示形式是一串7到13字节的字符串,每个字节由两个十进制数字组成。 前4个字节表示日期,后3个字节表示时间,其余字节表示基于时间戳精度的秒数。
目录中描述的“无时区时间戳”列的长度为内部长度,即7至13字节。
SQLDA中描述的“无时区时间戳”列的长度在19-32字节之间,与该值的字符串表示的长度相对应。 例如,19字节字符串表示法没有小数秒;26字节字符串表示法有6位小数秒;29字节字符串表示法有9位小数秒。
字符串表示的实际长度不能超过255字节,且不能是CLOB或DBCLOB。
TIMESTAMP WITH TIME ZONE
带有时区信息的 TIMESTAMP 值的外部表示形式是本地时间戳,后跟时区偏移量。 例如,在标准时间下,纽约比伦敦晚5小时,因此2010年2月10日纽约时间“8:15”可以表示为' 2010-02-10-08.15.00-5:00 '。 此时间戳带有时区值,表示UTC值“ 2010-02-10-13.15.00 ”,它是从本地时间戳中减去时区偏移量得出的。
时间戳的内部表示形式是一串9到15字节的字符串,包含UTC时间戳和时区。 每个字节由2个十进制数字组成。 第一个字节由两个十进制数字组成,表示时区小时数,第一个比特用于表示时区偏移的符号。 时区的第二个字节表示时区分钟,也是由两个十进制数字组成。 例如,时区 "-3 :30"表示为X'8330',时区"5:30"表示为X'0530'。
目录中描述的带时区的TIMESTAMP列的长度是内部长度,介于9到15字节之间(7到13字节的时间戳后跟2字节时区)。
SQLDA中描述的带时区的TIMESTAMP列的长度是外部长度,范围在147-160字节之间,与字符串表示的值的长度相对应。 例如,147字节字符表示法没有小数秒,而160字节字符串表示法有12位小数秒,其中时区部分占7个字节。
字符串表示的实际长度不能超过255字节,且不能是CLOB或DBCLOB。 因此,DCLGEN为TIMESTAMP WITH TIME ZONE列定义了147到160字节不等的可变长度字符串变量。