首批通过分布式安全可靠测评,为关键业务系统打造
日期时间 DATE 和间隔 INTERVAL 的计算
更新时间:2026-03-23 11:47:46
日期(DATE)、时间戳(TIMESTAMP、TIMESTAMP WITH TIME ZONE 和 TIMESTAMP WITH LOCAL TIME ZONE)和间隔(INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND)数据类型支持算术运算。本文主要介绍日期时间 DATE 和间隔 INTERVAL 的计算规则。
OceanBase 数据库根据以下规则计算结果:
在日期和时间戳值(而非间隔值)的算术运算中可以使用
NUMBER常量。OceanBase 数据库在内部将时间戳值转换为日期值,并将算术日期时间和间隔表达式中的NUMBER常量解释为天数。例如,SYSDATE+1 是明天。SYSDATE-7 是一周前。SYSDATE+(10/1440)是十分钟之后。注意
日期或时间戳值不能进行乘法或除法运算。
OceanBase 数据库将
BINARY_FLOAT和BINARY_DOUBLE操作数转换为NUMBER。每个
DATE值都包含一个时间成分,许多日期运算的结果都包含一个分数。此分数表示一天的一部分。例如,1.5 天是 36 个小时。OceanBase 内置函数还返回这些分数,以对DATE数据执行常见操作。例如,MONTHS_BETWEEN函数返回两个日期之间的月数。结果的小数部分代表一个 31 天月份的那部分。如果一个操作数是
DATE值或数字值,但都不包含时区或小数秒部分,则:- OceanBase 数据库将其他操作数转换为 DATE 数据。数值乘以间隔运算除外,将返回一个间隔。
- 如果另一个操作数具有时区值,则 OceanBase 数据库在返回的值中使用当前会话时区。
- 如果另一个操作数具有小数秒数值,则小数秒数值将丢失。
当将时间戳、时间间隔或数字值传递给仅限于
DATE数据类型使用的内置函数时,OceanBase 数据库将把非DATE值转换为DATE值。当间隔计算返回日期时间值时,结果必须是实际的日期时间值,否则数据库将返回错误。示例如下:
SELECT TO_DATE("31-AUG-2004','DD-MON-YYYY") + TO_YMINTERVAL("0-1") FROM DUAL; SELECT TO_DATE("29-FEB-2004','DD-MON-YYYY") + TO_YMINTERVAL("1-0") FROM DUAL;第一条语句在一个有 31 天的月份上增加一个月,导致计算结果为 9 月 31 日,这不是有效的日期,执行失败。第二条语句在仅每四年存在的日期上增加一年是无效的,执行失败。但是,在 2 月 29 日之前加上四年是有效的,计算结果为
2008年2月29日:SELECT TO_DATE("29-FEB-2004", "DD-MON-YYYY") + TO_YMINTERVAL("4-0") FROM DUAL;下表是日期时间算术运算的矩阵。"---"表示不支持的操作。
