返回首页

gbase数据、南大通用产品文档:GBase8s时间数据类型

更新日期:2024年09月11日

DATE 、DATETIME 和 TIMESTAMP 数据值表示零维时间点;INTERVAL 数据值表示 1
维时间范围(具有正值或负值)。DATE 精度总是天的整数计数,但各种字段限定符可以
定义 DATETIME 和 INTERVAL 精度。您可使用算术和关系表达式中的 DATE、DATETIME、
TIMESTAMP 和 INTERVAL 数据。可以使用另一个 DATETIME 值、INTERVAL 值和当前时间
(由关键字 CURRENT 指定)或某个时间单位(通过使用关键字 UNITS)来处理 DATETIME
值。
可以在 DATETIME 值有效的大多数上下文中使用 DATE 值,反之亦然。还可以在
DATETIME 值有效的算术运算中使用 INTERVAL 操作数。此外,可以使两个 INTERVAL 值
相加,并可以用一个数来乘或除 INTERVAL 值。
INTERVAL 列可以保存表示两个 DATETIME 值之差或两个 INTERVAL 值之差(或之
和)的值。在这两种情况下,结果都是时间范围,该时间范围是一个 INTERVAL 值。相
反,如果从 DATETIME 值中加上或减去 INTERVAL 值,那么会生成另一个 DATETIME 值,
因为结果是特定时间。
表 1列出了可以对 DATE、DATETIME 和 INTERVAL 操作数执行的二进制算术运算以及
由算术表达式返回的数据类型。
表 1. 对 DATE、DATETIME、TIMESTAMP 和 INTERVAL 值的算术运算
操作数 1
运算符
操作数 2
结果
DATE
-
DATETIME
INTERVAL
DATETIME
-
DATE
INTERVAL
DATE
+或-
INTERVAL
DATETIME
DATETIME
-
DATETIME
INTERVAL
DATETIME
+或-
INTERVAL
DATETIME
INTERVAL
+
DATETIME
DATETIME
INTERVAL
+或-
INTERVAL
INTERVAL
DATETIME
-
CURRENT
INTERVAL
CURRENT
-
DATETIME
INTERVAL
INTERVAL
+
CURRENT
DATETIME

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 122 -
操作数 1
运算符
操作数 2
结果
CURRENT
+或-
INTERVAL
DATETIME
DATETIME
+或-
UNITS
DATETIME
INTERVAL
+或-
UNITS
INTERVAL
INTERVAL
* 或/
NUMBER
INTERVAL
不允许其他组合。不能使两个 DATETIME 值或两个 TIMESTAMP 值相加,原因是此操
作不会生成特定时间或时间范围。例如:不能将 12 月 25 日与 1 月 1 日相加,但您可
以从一个值中减去另一个以了解两者之间的时间跨度。
与数字常量运算
可以将 DATETIME、TIMESTAMP 值加或减数字常量。该数字常量可以是整数和浮点
数。GBase 8s 数据库将运算日期表达式中的数字常量解释为天数。例如 SYSDATE +1 是
明天,SYSDATE +(10/1440)表示从现在起十分钟。
DATETIME 值或 TIMESTAMP 值可以来自下列源:
类型为 DATETIME (或 TIMESTAMP) 的列或程序变量
SYSDATE 关键字
CURRENT 关键字
TO_DATE() 函数
浮点数不能大于11574。
例如,
SELECT TO_CHAR(
TO_DATE(‘20170101 08:00:00’,’YYYY-MM-DD HH24:MI:SS’)+1.25,
YYYY-MM-DD HH24:MI:SS’)
FROM DUAL;
Result: 2017-01-02 14:00:00
DATETIME 值或 TIMESTAMP 值运算
可以将 DATETIME 值(或 TIMESTAMP 值)互相进行减法运算。
日期可以是任何顺序。DATETIME 值(或 TIMESTAMP 值)可以来自下列源:
类型为 DATETIME (或 TIMESTAMP) 的列或程序变量
SYSDATE 关键字
CURRENT 关键字
TO_DATE() 函数
其运算结果可以是以下两种类型:

正的或负的 INTERVAL 值。第一个 DATETIME 值确定结果的精度,它包含与第一
个操作数相同的时间单位。

正的或负的浮点数(以天为单位)。这种情况只能通过 JDBC 接口返回。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 123 -
例如,假定当前系统时间为 2017 年 1 月 3 日 14:00:00 ,执行以下语句,用户通
过 JDBC 接口得到一个以天为单位的浮点数:
SELECT SYSDATE-TO_DATE(‘20170102 08:00:00’,’YYYY-MM-DD HH24:MI:SS’)
FROM DUAL;
Result: 1.25(通过 JDBC 接口返回)
如果第二个 DATETIME 值(或 TIMESTAMP 值)具有的字段比第一个值少,那么会自
动增加第二个操作数的精度以与第一个值相匹配。
在下面的示例中,从 DATETIME YEAR TO MINUTE 值中减去 DATETIME YEAR TO HOUR
值,从而得到正的时间间隔值 60 天 1 小时 30 分钟。由于第二个操作数中不包括分
钟,所以在执行减法之前,数据库服务器将第二个操作数的分钟值设置为 0。
DATETIME (2003-9-30 12:30) YEAR TO MINUTE
- DATETIME (2003-8-1 11) YEAR TO HOUR
Result: INTERVAL (60 01:30) DAY TO MINUTE
如果第二个 DATETIME 操作数的字段比第一个操作数多(不管额外字段的精度是大于
还是小于第一个操作数中的字段),在计算过程中都会忽略第二个值中附加的时间单位字
段。这指示第二个日期比第一个晚。
DATETIME (2005-9-30) YEAR TO DAY
- DATETIME (10-1) MONTH TO DAY
Result: INTERVAL (-1) DAY TO DAY [假定当前年为 2005]
您可以使用 mi_datetime_compare() 函数比较两个 DATETIME 值。
用 INTERVAL 值处理 DATETIME
算术INTERVAL 操作数可以将 INTERVAL 值与 DATETIME 值相加或从 DATETIME 值中
减去。在这两种情况下,结果都是 DATETIME 值。如果将 INTERVAL 值与 DATETIME 值相
加,那么值的顺序不重要;但是,如果进行减法运算,那么 DATETIME 值必须在前面。加
或减正的 INTERVAL 值会使 DATETIME 结果时间推后或提前。下面示例中的表达式使日期
提前 3 年 5 个月:
DATETIME (2000-8-1) YEAR TO DAY
+ INTERVAL (3-5) YEAR TO MONTH

Result: DATETIME (2004-01-01) YEAR TO DAY
要点: 估计加或减的逻辑。请注意,有 28、29、30 或 31 天的月份以及有 365 或
366 天的年份。
EXTEND 函数DATETIME 数据类型EXTEND 函数在大多数情况下,当操作数没有相同的
精度时数据库服务器自动调整计算。但是,在某些上下文中,必须显式调整一个值的精确
才能执行计算。如果加上或减去的 INTERVAL 值具有未包括在 DATETIME 值中的字段,那

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 124 -
么必须使用 EXTEND 函数来增加 DATETIME 值的精度。(有关 EXTEND 函数的更多信息,
请参阅 GBase 8s SQL 指南:语法 中的 Expression 段。)
TO 关键字EXTEND 函数YEAR 关键字EXTEND 函数例如,不能从上面示例中具有 YEAR
TO DAY 字段限定符的 DATETIME 值中减去 INTERVAL MINUTE TO MINUTE 值。但是,如下
面的示例所示,可以使用 EXTEND 函数来执行此计算:
EXTEND (DATETIME (2008-8-1) YEAR TO DAY, YEAR TO MINUTE)
- INTERVAL (720) MINUTE(3) TO MINUTE

Result:DATETIME (2008-07-31 12:00) YEAR TO MINUTE
字段限定符EXTEND 函数EXTEND 函数允许您显式将 DATETIME 精度从 YEAR TO DAY
增加至 YEAR TO MINUTE。这使得数据库服务器能够执行计算,并且生成 YEAR TO MINUTE
的扩展精度。
使用 DATETIME 和 INTERVAL 值处理 DATE
如表 2 所示,可将某些算术表达式中的 DATE 操作数与 DATETIME 或 INTERVAL 操
作数配合使用(通过编写表达式来执行处理)。
表 2. 用 DATETIME 或 INTERVAL 值处理 DATE 的表达式的结果
表达式
结果
DATE – DATETIME
INTERVAL
DATETIME – DATE
INTERVAL
DATE +或– INTERVAL
DATETIME

在表 2 所示的情况下,第一次将 DATE 值转换为其对应的 DATETIME 等值,然后使
用算术规则对表达式进行求值。
虽然在许多情况下,您可以交换 DATE 与 DATETIME 值,但是必须指定值是 DATE 还
是 DATETIME 数据类型。DATE 值可以来自下列源:
类型为 DATE 的列或程序变量
TODAY 关键字
DATE( ) 函数
MDY 函数
DATE 文字
DATETIME 值可以来自以下源:
类型为 DATETIME 的列或程序变量
DATETIME 数据类型源数据
CURRENT 关键字

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 125 -
EXTEND 函数
DATETIME 文字
数据库语言环境定义缺省 DATE 和 DATETIME 格式。对于缺省语言环境“美国英
语”,这些格式以“mm/dd/yy”表示 DATE 值,“yyyy-mm-ddhh:MM:ss”表示 DATETIME
值。
带引号字符串 DATE 和 DATETIME 文字字符串要将 DATE 和 DATETIME 值表示为字符
串,字符串中字段的顺序必须为所需顺序。换句话说,当期望 DATE 值时,字符串必须使
用 DATE 格式,当期望 DATETIME 值时,字符串必须使用 DATETIME 格式。例如,可以将
字符串 10/30/2008 用作 DATE 字符串,但不能用作 DATETIME 字符串。相反,必须将
2008-10-30 或 08-10-30 用作 DATETIME 字符串。
在非缺省语言环境中,文字 DATE 和 DATETIME 字符串必须与语言环境定义的格式相
匹配。有关更多信息,请参阅《GBase 8s GLS 用户指南》。
可以使用 DBDATE 和 GL_DATE 环境变量来定制数据库服务器期望的 DATE 格式。可
以使用 DBTIME 和 GL_DATETIME 环境变量来定制数据库服务器期望的 DATETIME 格式。
有关更多信息,请参阅 DBDATE 环境变量和 DBTIME 环境变量。有关所有这些环境变
量的更多信息,请参阅《GBase 8s GLS 用户指南》。
UNITS 运算符还可以从一个 DATE 值中减去另一个 DATE 值,但结果是正或负的
INTEGER 天数计数,而不是 INTERVAL 值。如果需要 INTERVAL 值,那么可以使用 UNITS
DAY 运算符来将 INTEGER 值转换为 INTERVAL DAY TO DAY 值,否则在相减之前使用
EXTEND 来将其中一个 DATE 值转换为 DATETIME 值。
限定符字段UNITS( / ), 斜杠DATE 分隔符例如,以下表达式使用 DATE( ) 函数将字
符串常量转换为 DATE 值,计算它们的差,然后使用 UNITS DAY 关键字将 INTEGER 结果
转换为 INTERVAL 值:
(DATE ('5/2/2007') - DATE ('4/6/1968')) UNITS DAY
Result: INTERVAL (12810) DAY(5) TO DAY
要点: 由于 UNITS 相对于其他 SQL 运算符具有较高的优先级,通常应将作为
UNITS 的操作数的任何算术表达式括在圆括号中,就象先前的示例那样。( ( ) ), 圆括
号表达式中的定界符
限定符字段EXTEND如果需要 YEAR TO MONTH 精度,那么可以在第一个 DATE 操作数
中使用 EXTEND 函数,如下面的示例所示:
EXTEND (DATE ('5/2/2007'), YEAR TO MONTH) - DATE ('4/6/1969')

Result: INTERVAL (39-01) YEAR TO MONTH
DATETIME 数据类型在表达式中因为 DATETIME 值先出现,所以结果 INTERVAL 精度

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 126 -
是 YEAR TO MONTH。如果 DATE 值先出现,那么结果 INTERVAL 精度将是 DAY(5) TO
DAY。
处理 INTERVAL 值
仅当两个 INTERVAL 值都来自同一个类时(即两个值都是 year-month 或都是 day-
time)才能将这两个值相加或相减。
在下面的示例中,从 MINUTE TO FRACTION 值中减去了 SECOND TO FRACTION 值:
INTERVAL (100:30.0005) MINUTE(3) TO FRACTION(4)
- INTERVAL (120.01) SECOND(3) TO FRACTION
Result: INTERVAL (98:29.9905) MINUTE TO FRACTION(4)
使用数字限定符警告数据库服务器:第一个值中的 MINUTE 和 FRACTION 以及第二个
值中 SECOND 超出了缺省位数。
当加上或减去 INTERVAL 值时,第二个值的字段精度不能比第一个值的字段精度高。
但是,第二个 INTERVAL 可具有比第一个精度小的字段。例如,当第一个 INTERVAL 为
DAY TO HOUR 时,第二个 INTERVAL 可以是 HOUR TO SECOND。在计算过程中会忽略第二
个 INTERVAL 值中的附加字段(在此情况下为 MINUTE 和 SECOND)。
您可以使用 mi_interval_compare() 函数比较两个 INTERVAL 值。
乘或除 INTERVAL 值
(*), 星号乘运算符可以用数字乘或除 INTERVAL 值。但是,计算中的任何余数将被
忽略,并且结果会截断为 INTERVAL 的精度。下面的表达式用一个具有小数部分的文字数
字乘以 INTERVAL 值:
INTERVAL (15:30.0002) MINUTE TO FRACTION(4) * 2.5
Result: INTERVAL (38:45.0005) MINUTE TO FRACTION(4)
INTERVAL 数据类型在表达式中在此示例中,15 * 2.5 = 37.5 分钟,30 * 2.5 = 75
秒以及 2 * 2.5 = 5 FRACTION (4)。将 0.5 分钟转换为 30 秒,将 60 秒转换为 1 分
钟,这产生最后结果 38 分钟 45 秒又 0.0005 秒。任何计算结果都具有与原始
INTERVAL 操作数相同的精度。

大数目(SQL 管理 API)
随同 admin() 或 task() 函数,使用 onmode 和 S 参数来更改当前正在执行的当期会话
决策支持扫描的最大数目。
语法

元素
描述
关键考虑
scans
当前正在执行的并
行扫描的最大数目。

该数目必须是从 10 至 1
048
576 的无符号整数。


用法
在数据库服务器处于 online 时,使用这个函数来覆盖 DS_MAX_SCANS 配置参数设置的限
制。新的值仅影响数据库服务器的当前实例;这些值不记录在 ONCONFIG 文件中。如果您
关闭并重启数据库服务器,则该参数的值恢复为 ONCONFIG 文件中的值。
要了解用于控制 PDQ 参数的信息,请参阅 GBase 8s 性能指南。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 770 -

这个函数等同于 onmode -S 命令。
示例
下列示例设置当前正在执行的并行扫描的最大数目为 2000:
EXECUTE FUNCTION task("onmode","S","2000");

syscomms 系统目录表用于存储表、视图注释的信息。对于每个要添加注释的表或视
图,都存在一行。如果删除该表或视图,则此行信息同步删除。
syscomms 表具有以下列:
字段
数据类型
解释
tabid
INTEGER
唯一地标识表的代码
comments
NVARCHAR(255)
用户为表或视图添加的注释