GBase 8s支持的时间类型数据有时间类型,日期类型,时间戳类型。
在C语言中, 使用GCIDateTime对象表示时, 使用子类型区分。
C
(64位系统
)
SQLT类型
GCIDateTime时间
GCI_DTYPE_TIME
datetime hour to second
SQLT_TIME
GCIDateTime日期
GCI_DTYPE_DATE
Datetime year to day
SQLT_DATE
GBase 8s GCI 接口使用指南
南大通用数据技术股份有限公司 10
GCIDateTime时间戳
GCI_DTYPE_TIMES
TAMP
除去以上类型的其他时
间类型, 例如datetime
year to fraction(5) ,
datetime hour to
fraction(4).
SQLT_TIMESTA
MP
GCI接口在使用时间类型做数据库访问操作时,有如下规则:
GCIDateTime 时间, 包含小时(范围 0~23) ,分钟(范围 0~59) ,秒(范围 0~59),
不包含纳秒。
GCIDateTime 日期,包含年(范围-4712~9999),月(范围 0~11),日(范围 1~31)。
GCIDateTime 时间戳,包含年(范围-4712~9999) ,月(范围 0~11), 日(范围
1~31), 小时(范围 0~23),分钟(范围 0~59), 秒(范围 0~59) ,纳秒(
范 围 0~999999999)
关于纳秒, GBase8s中datetime的fraction类型的位数范围是1~5,最大只保留5位有效数字
, 所以纳秒的低4位会被舍弃。例如,对于datetime year to fraction(5)的数据, 输入值为
9999, 存入数据库的值为0。
Datetime对象类型使用举例:
/* 分配用于存储数据的变量*/
GCIDateTime *tstmpltz = (GCIDateTime *)NULL;
/* Col1 是时间戳 */
GCIText *sqlstmt = (GCIText *)"SELECT col1 FROM foo";
/* 分配Datetime对象句柄 */
status = GCIDescriptorAlloc(envhp,(void **)&tstmpltz, GCI_DTYPE_TIMESTAMP,
0, (void **)0);
....
status = GCIStmtPrepare (stmthp, errhp, sqlstmt, (ub4)strlen ((char *)sqlstmt),
(ub4)GCI_NTV_SYNTAX, (ub4)GCI_DEFAULT);
/* 绑定对象句柄,注意是指针的地址*/
status = GCIDefineByPos(stmthp, &defnp, errhp, 1, &tstmpltz, sizeof(tstmpltz),
SQLT_TIMESTAMP_LTZ, 0, 0, 0, GCI_DEFAULT);
/*执行和获取*/
GCIStmtExecute(svchp, stmthp, errhp, 1, 0,(GCISnapshot *) NULL,
(GCISnapshot *)NULL, GCI_DEFAULT)