GBase 8s
适配迁移
文章

GBase8s之数据类型DateTime

发表于2025-12-11 11:03:37154次浏览0个评论

GBase 8s 数据库中的 DATETIME 类型用于存储日期和时间信息,其设计兼容 Oracle 数据库的日期类型,但存在一些关键差异。‌1

数据类型定义与兼容性

  • DATETIME 类型‌:在 GBase 8s 中,DATETIME 类型对应 Oracle 的 DATE 类型,但默认存储精度为年、月、日,不包含时分秒信息。若需支持时分秒,需使用 DATETIME YEAR TO SECONDDATETIME YEAR TO FRACTION 等修饰符。‌1

  • 兼容性说明‌:GBase 8s 完全兼容 Oracle 的 DATETIMESTAMP 等类型,但需注意:

    • Oracle 的 DATE 类型(含时分秒)在 GBase 8s 中映射为 DATETIME YEAR TO SECOND

    • Oracle 的 TIMESTAMP 类型在 GBase 8s 中对应 DATETIME YEAR TO FRACTION(n),其中 n 表示小数秒位数(最多保留 5 位)。‌1

常用函数与操作

  • 日期转换函数‌:TO_DATE 函数用于将字符串转换为 DATETIME 类型,支持自定义格式化串(如 YYYY-MM-DD HH:MI:SS)。‌2 示例:

    sqlCopy Code

     

    SELECT TO_DATE('2017-07-21 13:33:24', 'YYYY-MM-DD HH:MI:SS');

    若格式串省略,系统会自动补全缺失部分(如缺省年份用当前年,缺省时分秒用 00)。‌2

  • 获取当前时间‌:使用 SYSDATECURRENTTODAY 函数:

    • SYSDATE 返回当前日期和时间,适用于 DATETIME 变量,需指定精度修饰符(如 DATETIME YEAR TO SECOND)。‌3

    • TODAY 仅返回日期部分(无时分秒),适用于 DATE 类型列。‌3

  • 时间间隔处理‌:GBase 8s 支持 INTERVAL 类型(如 YEAR TO MONTHDAY TO SECOND),可通过 EXTENDdtextend() 函数进行隐式转换。‌45

数据类型细节与注意事项

  • 存储与精度‌:DATETIME 类型存储世纪、年、月、日、小时、分钟和秒信息,占用 7 字节空间。‌1 修饰符定义精度,例如:

    • DATETIME YEAR TO DAY:存储年、月、日。

    • DATETIME YEAR TO SECOND:存储年、月、日、时、分、秒。

  • 隐式转换‌:在 ESQL/C 中,DATETIMEINTERVAL 类型可与字符串类型(如 CHARVARCHAR)自动转换,失败时会报错。‌4

  • 编程接口‌:通过 ESQL/C 的 dtime_t 结构体处理 DATETIME 值,其成员包括 dt_qual(修饰符)和 dt_dec(实际值)。‌5

示例与最佳实践

  • 转换与查询‌:

    sqlCopy Code

     

    -- 将字符串转换为 DATETIME SELECT TO_DATE('07-21', 'MM-DD'); -- 返回 2017-07-21 00:00:00.000000(当前年份补全) -- 使用 SYSDATE 设置默认值 CREATE TABLE example (  id INT,  created_time DATETIME YEAR TO SECOND DEFAULT SYSDATE );

  • 注意事项‌:

    • 使用 TO_DATE 时,格式串与字符串的连接符需一致,否则转换失败。‌2

    • 在 ESQL/C 中操作 DATETIME 时,需确保 dt_qual 字段为有效修饰符,否则插入或更新会报错。‌4

评论

登录后才可以发表评论