全部产品
云市场

间隔字面量

更新时间:2020-03-25 13:06:37

间隔字面量(Interval Literals)用来指定一段时间的值。OceanBase 支持两种类型的间隔字面量:

前导字段和尾随字段

每种间隔字面量都包含一个前导字段和一个可选的尾随字段。前导字段定义了要测量的日期或时间的基本单位,尾随字段定义了所考虑的基本单位的最小增量。例如,DAY TO MINUTE 用来指定最小单位到月份的间隔字面量,其中前导字段是 YEAR,尾随字段是 MINUTE。尾随字段是可选的,在指定间隔字面量时可以省去。

在间隔字面量中有以下字段:YEARMONTHDAYHOURMINUTESECOND。它们的权重从 YEAR 开始按顺序递减。当需要指定尾随字段时,字面量中尾随字段的权重一定要低于前导字段,否则是无效的指定。例如,INTERVAL '1-2' DAY TO YEAR 是个无效的字面量。

前导字段值的位数范围为 0~9,默认值为 2。SECOND 字段指定了秒数,该字段最大可以精确到小数点后 9 位,最小是小数点 0 位,默认值精度是小数点 6 位。字段的值超出指定的范围后,数据库会返回错误。SECOND 字段的小数位数如果超出指定精度,会四舍五入到符合指定精度的值。

INTERVAL YEAR TO MONTH 字面量

INTERVAL YEAR TO MONTH 字面量用来指定以年和月为单位的一段时间。

以下是一些 INTERVAL YEAR TO MONTH 字面量的示例:

示例 说明
INTERVAL ‘265-2’ YEAR(3) TO MONTH 间隔 265 年 2 个月。前导字段 YEAR 的精度大于默认的 2 位,需要指定与值位数相符的精度值
INTERVAL ‘265’ YEAR(3) 表示间隔 265 年。
INTERVAL ‘500’ MONTH(3) 表示间隔 500 个月或 41 年 8 个月。
INTERVAL ‘10’ MONTH 表示隔 10 个月。
INTERVAL ‘123’ YEAR 返回错误,值 123 超出了默认精度 2 位。

可以在一个 INTERVAL YEAR TO MONTH 字面量之间添加或减去另一个 INTERVAL YEAR TO MONTH 字面量。例如:INTERVAL '6-2' YEAR TO MONTH + INTERVAL'21' MONTH = INTERVAL '7-11' YEAR TO MONTH

INTERVAL DAY TO SECOND 字面量

INTERVAL DAY TO SECOND 字面量用来指定以天和具体时间为单位的一段时间。

以下是一些 INTERVAL DAY TO SECOND 字面量的示例:

示例 说明
INTERVAL ‘4 5:12:10.222’ DAY TO SECOND(3) 表示间隔 4 天 5 小时 12 分钟 10.222 秒。SECOND 字段小数点默认精度是 6,这里如果不手动指定精度为 3,返回的结果中会用 0 补齐位数。
INTERVAL ‘4 5:12’ DAY TO MINUTE 表示间隔 4 天 5 小时 12 分钟
INTERVAL ‘400 5’ DAY(3) TO HOUR 表示间隔 400 天 5 小时。前导字段 DAY 超出默认精度 2 位,这里手动指定精度为 3。
INTERVAL ‘400’ DAY(3) 表示间隔 400 天。
INTERVAL ‘11:12:10.2222222’ HOUR TO SECOND(7) 表示间隔 11 小时 12 分钟 10.2222222 秒。SECOND 字段的值超出默认精度 6 位,这里手动指定了和值相符的精度。
INTERVAL ‘11:20’ HOUR TO MINUTE 表示间隔 11 小时 20 分钟。
INTERVAL ‘10’ HOUR 表示间隔 10 小时
INTERVAL ‘10:22’ MINUTE TO SECOND 表示间隔 10 分钟 22 秒。
INTERVAL ‘10’ MINUTE 表示间隔 10 分钟。
INTERVAL ‘4’ DAY 表示间隔 4 天。
INTERVAL ‘25’ HOUR 表示间隔 25 小时。
INTERVAL ‘40’ MINUTE 表示间隔 40 分钟。
INTERVAL ‘120’ HOUR(3) 表示间隔 120 小时。
INTERVAL ‘30.12345’ SECOND(2,4) 表示间隔 30.1235 秒。秒的小数点位数超出指定精度,所以四舍五入到小数点第 4 位。

可以在一个 INTERVAL DAY TO SECOND 字面量之间添加或减去另一个 INTERVAL DAY TO SECOND 字面量。例如:INTERVAL'20' DAY - INTERVAL'239' HOUR = INTERVAL'10-1' DAY TO SECOND