使用 DATETIME 和 INTERVAL 值处理 DATE

表 1 所示,可将某些算术表达式中的 DATE 操作数与 DATETIME 或 INTERVAL 操作数配合使用(通过编写表达式来执行处理)。
表 1. 用 DATETIME 或 INTERVAL 值处理 DATE 的表达式的结果
表达式 结果
DATE DATETIME INTERVAL
DATETIME DATE INTERVAL
DATE + INTERVAL DATETIME

表 1 所示的情况下,第一次将 DATE 值转换为其对应的 DATETIME 等值,然后使用算术规则对表达式进行求值。

虽然在许多情况下,您可以交换 DATE 与 DATETIME 值,但是必须指定值是 DATE 还是 DATETIME 数据类型。DATE 值可以来自下列源:
DATETIME 值可以来自以下源:

数据库语言环境定义缺省 DATE 和 DATETIME 格式。对于缺省语言环境“美国英语”,这些格式以“mm/dd/yy”表示 DATE 值,“yyyy-mm-dd hh:MM:ss”表示 DATETIME 值。

要将 DATE 和 DATETIME 值表示为字符串,字符串中字段的顺序必须为所需顺序。换句话说,当期望 DATE 值时,字符串必须使用 DATE 格式,当期望 DATETIME 值时,字符串必须使用 DATETIME 格式。例如,可以将字符串 10/30/2008 用作 DATE 字符串,但不能用作 DATETIME 字符串。相反,必须将 2008-10-3008-10-30 用作 DATETIME 字符串。

在非缺省语言环境中,文字 DATE 和 DATETIME 字符串必须与语言环境定义的格式相匹配。有关更多信息,请参阅《GBase 8s GLS 用户指南》。

可以使用 DBDATEGL_DATE 环境变量来定制数据库服务器期望的 DATE 格式。可以使用 DBTIMEGL_DATETIME 环境变量来定制数据库服务器期望的 DATETIME 格式。有关更多信息,请参阅 DBDATE 环境变量DBTIME 环境变量。有关所有这些环境变量的更多信息,请参阅《GBase 8s GLS 用户指南》。

还可以从一个 DATE 值中减去另一个 DATE 值,但结果是正或负的 INTEGER 天数计数,而不是 INTERVAL 值。如果需要 INTERVAL 值,那么可以使用 UNITS DAY 运算符来将 INTEGER 值转换为 INTERVAL DAY TO DAY 值,否则在相减之前使用 EXTEND 来将其中一个 DATE 值转换为 DATETIME 值。

例如,以下表达式使用 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 的操作数的任何算术表达式括在圆括号中,就象先前的示例那样。
如果需要 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 值先出现,所以结果 INTERVAL 精度是 YEAR TO MONTH。如果 DATE 值先出现,那么结果 INTERVAL 精度将是 DAY(5) TO DAY。