DATETIME 数据类型会存储以日历日期和一天中的时间表示的瞬间时刻。
您选择存储 DATETIME 值的精确度;其精度范围可从一年到几分之一秒。
DATETIME 将数据值存储为在数据类型声明中表示每个时间单位(年、月和日等等)的连续字段序列。
DATETIME largest_qualifier TO smallest_qualifier
如果 smallest_qualifier 未指定大于 largest_qualifier 的时间单位,那么 DATETIME 数据类型的 largest_qualifier 和 smallest_qualifier 可以是下表列出的任何字段。(最大和最小时间单位可以相同;例如,DATETIME YEAR TO YEAR。)
限定符字段 | 有效条目 |
---|---|
YEAR | 从 1 到 9,999(公元)编号的年份 |
MONTH | 从 1 到 12 编号的月份 |
DAY | 从 1 到 31 编号的日(适合于月) |
HOUR | 从 0(午夜)到 23 编号的小时 |
MINUTE | 从 0 到 59 编号的分钟 |
SECOND | 从 0 到 59 编号的秒 |
FRACTION | 最多具有 5 位小数位的秒的十进制小数。缺省小数位是 3 位(千分之一秒)。对于 smallest_qualifier,要指定另一个小数位,请写 FRACTION(n),其中 n 是位数(从 1 到 5)。 |
DATETIME 列的声明不需要包括全部 YEAR 至 FRACTION 时间单位范围。它可以包括这些时间单位的任何连续子集,或者甚至仅包括单个时间单位。
例如,如果每个输入的值都包含连续的时间单位系列的信息,就可以在声明为 YEAR TO MINUTE 的列中输入 MONTH TO HOUR 值。但是,不能只输入 MONTH 和 HOUR 的值;条目中还必须包括 DAY 的值。
如果使用 DB-Access TABLE 菜单,并且未指定 DATETIME 限定符,那么会指定缺省 DATETIME 限定符 YEAR TO YEAR。
有效的 DATETIME 文字必须包含 DATETIME 关键字、要输入的值和字段限定符。如前面说明的那样,由于输入的值可包含比对列声明的字段数少的字段,所以必须包括这些限定符。第一个字段和最后一个字段的可接受限定符与表 1 列出的有效 DATETIME 字段的列表完全相同。
将字段限定符的值用整数表示并用定界符隔开这些限定符。下表列出了在缺省的美国英语语言环境中与 DATETIME 值配合使用的定界符。(这些定界符是在 INTERVAL 值中使用的定界符的超集。)
定界符 | 在 DATETIME 文字中的位置 |
---|---|
连字符 ( - )( = ) | 在 YEAR、MONTH 和 DAY 时间单位值之间 |
空格 ( ) | 在 DAY 与 HOUR 时间单位值之间 |
冒号 ( : ) | 在 HOUR、MINUTE 与 SECOND 时间单位值之间 |
小数点 ( . ) | 在 SECOND 与 FRACTION 时间单位值之间 |
图: 具有定界符的 DATETIME 值示例
当输入具有比列中的时间单位字段少的时间单位字段的值时,就会自动扩展输入的值以填满所有声明的时间单位字段。如果漏掉任何较高有效字段(即,时间单位大于包含的任何时间单位),那么会用系统时钟日历中的那些时间单位的当前值自动填充这些字段。如果漏掉任何不太重要的字段,那么在条目中会用零(或对 MONTH 和 DAY 使用 1)填充这些字段。
INSERT INTO cust_calls (customer_num, call_dtime, user_id, call_code, call_descr) VALUES (101, '2001-01-14 08:45', 'maryj', 'D', 'Order late - placed 6/1/00');
如果将 call_dtime 声明为 DATETIME YEAR TO MINUTE,那么字符串必须包含年、月、日、小时和分钟字段的值。
如果字符串不包含所有已声明字段的信息(或如果它添加了其他字段),那么数据库服务器会返回错误。
除了 year 和 fraction 字段之外,DATETIME 列的所有字段都是 2 位数。year 字段存储为 4 位。当在年份字段中输入两位值时,缩写的年份扩展为四位的方式取决于 DBCENTURY 环境变量的设置。
例如:如果输入 02 作为 year 值,那么将该年份是解释为 1902、2002 还是 2102 取决于 DBCENTURY 的设置和执行时系统时钟日历的值。如果不设置 DBCENTURY,那么在缺省情况下,将追加当前年份的前导数字。
(所有字段的总位数)/2 + 1
例如,YEAR TO DAY 限定符总共需要八位(四位用于年,两位用于月,两位用于日)。根据公式,此数据值需要 5(即 (8/2) + 1)个字节的存储器。
当数据库服务器在 SQL 语句中从操作系统获取当前时间时,USEOSTIME 配置参数可能会影响亚秒级粒度。有关详细信息,请参阅 GBase 8s 管理员参考。
使用 ESQL API 时,DBTIME 环境变量会影响 DATETIME 格式。GL_DATE 和 DBDATE 环境变量的非缺省语言环境和设置还会影响日期时间数据的显示。但是,它们不会影响 DATETIME 列的内部存储格式。
有关语言环境和可以指定最终用户 DATETIME 格式的 GLS 环境变量的更多信息,请参阅《GBase 8s GLS 用户指南》。