间隔字面量用来指定一段时间的值。OceanBase 支持两种类型的间隔字面量:
- INTERVAL YEAR TO MONTH
- INTERVA DAY TO SECOND
前导字段和尾随字段
每种间隔字面量都包含一个前导字段和一个可选的尾随字段。前导字段定义了要测量的日期或时间的基本单位,尾随字段定义了所考虑的基本单位的最小增量。例如,DAY TO MINUTE 用来指定最小单位到月份的间隔字面量,其中前导字段是 YEAR
,尾随字段是 MINUTE
。尾随字段是可选的,在指定间隔字面量时可以省去。
在间隔字面量中有以下字段:YEAR
、MONTH
、DAY
、HOUR
、MINUTE
和 SECOND
。它们的权重从 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
。