与 DATE
和 TIMESTAMP
数据类型储存特定的时间点日期不同,INTERVAL YEAR TO MONTH
使用日期元素 YEAR
和 MONTH
来储存一段时间,此数据类型对于表示两个日期时间值之间的差异很有用。
语法
INTERVAL YEAR [(percision)] TO MONTH
参数
参数 | 值 | 说明 |
percision | 0~9 | 代表了 YEAR 元素的精度,默认值为 2。也就是说在不指定该参数的情况下,最大可以存储 99 年 11 个月的间隔日期 (最大不能超过 100 年)。如果存储的参数超过了默认精度 2 位,那么这个参数的值不能为空,必须被明确指定。 |
日期格式
在插入 INTERVAL YEAR TO MONTH
数据类型的值时,有以下几种格式,更多关于间隔数据类型值的指定请参阅 间隔字面量:
语法 | 示例 | 说明 |
INTERVAL ’year-month’ YEAR(percision) TO MONTH | INTERVAL ’120-3’ YEAR(3) TO MONTH | 间隔 120 年 3 个月。由于 YEAR 元素的值大于默认精度 2,所以必须指定 YEAR 元素的精度为 3. |
INTERVAL ’year’ YEAR(percision) | INTERVAL ‘50’ YEAR | 间隔 50 年。 |
INTERVAL ’month’ MONTH | INTERVAL ‘500’ MONTH | 间隔 500 个月或者间隔 41 年 8 个月。 |
示例
如下代码所示,在表 Interval_Sample 中创建了数据类型为 INTERVAL YEAR TO MONTH
的三列
interval1、interval2 和 interval3,并向其中插入数值:
CREATE TABLE Interval_Sample (
interval1 INTERVAL YEAR TO MONTH,
interval2 INTERVAL YEAR(3) TO MONTH,
interval3 INTERVAL YEAR TO MONTH
);
INSERT INTO Interval_Sample (interval1, interval2, interval3)
VALUES (INTERVAL '12-3' YEAR TO MONTH, INTERVAL '120-3' YEAR(3) TO MONTH, INTERVAL '40' MONTH);
SELECT * FROM Interval_Sample;
返回结果:
+-----------+-----------+-----------+
| interval1 | interval2 | interval3 |
+-----------+-----------+-----------+
| +12-03 | +120-03 | +03-04 |
+-----------+-----------+-----------+
间隔与其他日期类型的计算
OceanBase 支持数据类型间的转换,所以间隔数据类型的值可以与其他日期值进行数学运算,但是数据库并不支持数据类型间任意的进行加、减、乘、除运算。请参阅文档 日期时间 DATE 和间隔 INTERVAL 的计算 中查看目前支持的日期类型计算矩阵图和参阅文档 数据类型转换 了解数更多数据类型转换的信息。
- 示例 1:间隔与间隔的计算,返回的值仍为间隔数据类型。
SELECT INTERVAL '2-2' YEAR TO MONTH -INTERVAL '1-1' YEAR TO MONTH calculate1, INTERVAL '2-2' YEAR TO MONTH + INTERVAL '1-1' YEAR TO MONTH calculate2 FROM DUAL;
返回结果:
+---------------+----------------+
| calculate1 | calculate2 |
+--------------------------------+
| +000000001-01 | +000000003-03 |
+---------------+----------------+
- 示例 2:间隔与日期时间的计算,返回的值为日期数据类型。
SYSDATE
返回当前的时间 2020-02-27 16:13:50,以下示例会返回从现在起两个月后的日期值。数据库只支持间隔+日期时间,而间隔-日期时间是无效运算。但是日期时间+间隔和日期时间-间隔都是有效运算。
SELECT TO_CHAR(INTERVAL '2' MONTH +SYSDATE,'YYYY-MM-DD HH24:MI:SS') calculate3 FROM DUAL;
返回结果:
+---------------------+
| calculate3 |
+---------------------+
| 2020-04-27 16:13:50 |
+---------------------+
- 示例 3:间隔和数字的运算,返回的值仍为间隔数据类型。
间隔可以与数字进行乘除运算。以下示例展示了间隔 2 月乘以 2 的计算和间隔 2 天除以 3 的计算。
SELECT INTERVAL '2' MONTH*2 calculate4, INTERVAL '2' DAY/3 calculate5 FROM DUAL;
返回结果为间隔 4 月和间隔 16 小时:
+---------------+-------------------------------+
| calculate4 | calculate5 |
+---------------+-------------------------------+
| +000000000-04 | +000000000 16:00:00.000000000 |
+---------------+-------------------------------+