返回首页

gbase数据、南大通用产品文档:GBase8sDATETIME 数据类型

更新日期:2024年09月11日

DATETIME 数据类型会存储以日历日期和一天中的时间表示的瞬间时刻。
您选择存储 DATETIME 值的精确度;其精度范围可从一年到几分之一秒。
DATETIME 将数据值存储为在数据类型声明中表示每个时间单位(年、月和日等等)的
连续字段序列。
用于指定 DATETIME 数据类型的字段限定符具有以下格式:
DATETIME largest_qualifier TO smallest_qualifier
这类似于 INTERVAL 字段限定符,
但 DATETIME 表示时间点而不是时间范围
(INTERVAL
表示时间范围)。DATETIME 和 INTERVAL 限定符之间存在如下差异:
DATETIME 关键字替换 INTERVAL 关键字。
DATETIME 字段限定符不能指定 largest_qualifier 时间单位的非缺省精度。
DATETIME 数据类型的字段限定符可以包含 YEAR、MONTH 和更小的时间单位,而
包含 DAY 字段限定符(或更小时间单位)的 INTERVAL 数据类型不能还包含 YEAR 或
MONTH 字段限定符。
如果 smallest_qualifier 未指定大于 largest_qualifier 的时间单位,那么

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 90 -

DATETIME 数据类型的 largest_qualifier 和 smallest_qualifier 可以是下表列出的任
何字段。(最大和最小时间单位可以相同;例如,DATETIME YEAR TO YEAR。)
表 4. DATETIME 字段限定符
限定符字段
有效条目
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 值中使
用的定界符的超集。)
表 5. 与 DATETIME 配合使用的定界符
定界符
在 DATETIME 文字中的位置
连字符
( - )( = )
在 YEAR、MONTH 和 DAY 时间单位值之间
空格 ( )
在 DAY 与 HOUR 时间单位值之间
冒号 ( : )
在 HOUR、MINUTE 与 SECOND 时间单位值之间
小数点 ( . )
在 SECOND 与 FRACTION 时间单位值之间

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 91 -


下图显示具有定界符的 DATETIME YEAR TO FRACTION(3) 值。图 2. 具有定界符的
DATETIME 值示例

当输入具有比列中的时间单位字段少的时间单位字段的值时,就会自动扩展输入的值
以填满所有声明的时间单位字段。如果漏掉任何较高有效字段(即,时间单位大于包含的
任何时间单位),那么会用系统时钟日历中的那些时间单位的当前值自动填充这些字段。
如果漏掉任何不太重要的字段,那么在条目中会用零(或对 MONTH 和 DAY 使用 1)填充
这些字段。
还可以将 DATETIME 值作为字符串输入。字符串必须包括 DATETIME 列中定义的每个
字段的信息。下面示例中的 INSERT 语句显示了作为字符串输入的 DATETIME 值:
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,那么在缺省
情况下,将追加当前年份的前导数字。

小数字段需要 n 位数,其中 1 ≤ n ≤ 5,上舍入为偶数。可以使用以下公式(上舍
入为整数个字节)来计算 DATETIME 值需要的字节数:
(所有字段的总位数)/2 + 1
例如,YEAR
TO
DAY 限定符总共需要八位(四位用于年,两位用于月,两位用于日)。
根据公式,此数据值需要 5(即 (8/2) + 1)个字节的存储器。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 92 -

当数据库服务器在 SQL 语句中从操作系统获取当前时间时,
USEOSTIME 配置参数可能
会影响亚秒级粒度。有关详细信息,请参阅 GBase 8s 管理员参考。
使用 ESQL
API 时,DBTIME 环境变量会影响 DATETIME 格式。GL_DATE 和 DBDATE 环
境变量的非缺省语言环境和设置还会影响日期时间数据的显示。但是,它们不会影响
DATETIME 列的内部存储格式。
如果指定的语言环境不是美国英语,那么该语言环境为 DATETIME 值定义特定于文化
的显示格式。要更改缺省显示格式,更改 GL_DATETIME 环境变量的设置。当具有非缺省语
言环境的数据库使用非缺省 GL_DATETIME 设置时,USE_DTENV 环境变量必须设置为 1,数
据库服务器才能在以下运算中正确处理本地化的 DATETIME 值:
使用 DB-Access 的 LOAD 或 UNLOAD 功能
使用 dbexport 或 dbimport 迁移实用程序
对 CREATE EXTERNAL TABLE 语句定义的数据库表或对象使用 SQL 的 DML 语句。

确保数据目录正确,以及相应数据目录下的pg_control 文件存在。

GCI 接口库的名称:libclntsh.so 或Libclntsh_gbase.so。
使用GCI 接口库进行应用程序编译时,需要设定LD_LIBARY_PATH 路径包含有:
l
GCI 接口库自身路径
l
$GBASEDBTDIR/lib/cli
l
$GBASEDBTDIR/lib/esql
l
$GBASEDBTDIR/lib
其中GBASEDBTDIR 是CSDK(或者odbc connector)安装路径。