GBase 8s 支持的时间类型数据有时间类型,日期类型, 时间戳类型。
Factory
Sql 类型
1(缺省值)
2
3
备注
DATE
SQLT_DAT
SQLT_DAT
SQLT_TIMESTAMP
TIME
SQLT_DAT
SQLT_DAT
SQLT_TIMESTAMP
DATETIME
SQLT_DAT
SQLT_DAT
SQLT_TIMESTAMP
在C 语言中,使用GCIDateTime 对象表示时, 使用子类型区分。
GCI 接口在使用时间类型做数据库访问操作时,有如下规则:
l
GCIDateTime 时间,包含小时(范围0~23)
,分钟(范围0~59)
,秒(范围0~59)
,不包
含纳秒。
l
GCIDateTime 日期,包含年(范围-4712~9999)
,月(范围0~11)
,日(范围1~31)
。
l
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 对象类型使用举例:
/* allocate the program variable for storing the data */
GCIDateTime *tstmpltz = (GCIDateTime *)NULL;
/* Col1 is a timestamp
*/
OraText *sqlstmt = (OraText *)"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);
/* Execute and Fetch */
GCIStmtExecute(svchp, stmthp, errhp, 1, 0,(GCISnapshot *) NULL,
(GCISnapshot *)NULL, GCI_DEFAULT)
At this point tstmpltz contains a valid timestamp with local time zone data. You
can get the time zone name of the datetime data using:
status = GCIDateTimeGetTimeZoneName(envhp, errhp, tstmpltz, (ub1 *)buf,
C 语言类型(64 位系
统)
子类型
数据库类型名称
SQLT 类型
GCIDateTime 时间
GCI_DTYPE_TI
ME
datetime
hour
to
second
SQLT_TIME
GCIDateTime 日期
GCI_DTYPE_D
ATE
Datetime year to day
SQLT_DATE
GCIDateTime 时间戳
GCI_DTYPE_TI
MESTAMP
除去以上类型的其他
时间类型, 例如
datetime
year
to
fraction(5), datetime
hour to fraction(4).
SQLT_TIMESTAMP
(ub4 *)&buflen);