全部产品

INTERVAL YEAR TO MONTH 数据类型

更新时间:2020-04-22 09:55:49

INTERVAL YEAR TO MONTH 是一种间隔数据类型,它使用日期元素 YEARMONTH 来储存一段时间。与 DATETIMESTAMP 数据类型储存特定的时间点不同,间隔数据类型可以用来表示两个日期时间值之间的差异。同时,数据库支持 间隔数据类型与其他数据类型的计算

语法

  1. INTERVAL YEAR [(precision)] TO MONTH

参数

参数 说明
precision 0~9 代表 YEAR 元素值的精度(位数),默认值为 2。也就是说在不指定该参数的情况下,最大可以存储 99 年 11 个月的间隔日期,因为此时年份值不能超过两位数(0~99)。
如果要求存储的 YEAR 元素的值超过默认精度 2 位(值大于 99),那么这个参数的值不能为空,必须被明确指定。

日期格式

在插入 INTERVAL YEAR TO MONTH 数据类型的值时,有以下几种格式,更多关于间隔数据类型值的指定请参阅文档 间隔字面量

语法 示例 说明
INTERVAL YEAR(precision) TO MONTH INTERVAL ‘120-3’ YEAR(3) TO MONTH 间隔 120 年 3 个月。由于 YEAR 元素的值大于默认精度 2,所以必须指定 YEAR 元素的精度为 3.
INTERVAL YEAR(precision) INTERVAL ‘50’ YEAR 间隔 50 年。
INTERVAL ‘month’ MONTH INTERVAL ‘500’ MONTH 间隔 500 个月或者间隔 41 年 8 个月。该示例没有使用元素 YEAR,所以无需指定参数 precision

示例

如下代码所示,在表 Interval_Sample 中创建了数据类型为 INTERVAL YEAR TO MONTH 的三列 interval1interval2interval3,并向其中插入数值:

  1. CREATE TABLE Interval_Sample (
  2. interval1 INTERVAL YEAR TO MONTH,
  3. interval2 INTERVAL YEAR(3) TO MONTH,
  4. interval3 INTERVAL YEAR TO MONTH
  5. );
  6. INSERT INTO Interval_Sample (interval1, interval2, interval3)
  7. VALUES (INTERVAL '12-3' YEAR TO MONTH, INTERVAL '120-3' YEAR(3) TO MONTH, INTERVAL '40' MONTH);
  8. SELECT * FROM Interval_Sample;

返回结果:

  1. +-----------+-----------+-----------+
  2. | interval1 | interval2 | interval3 |
  3. +-----------+-----------+-----------+
  4. | +12-03 | +120-03 | +03-04 |
  5. +-----------+-----------+-----------+

间隔与其他日期类型的计算

OceanBase 支持数据类型间的转换,所以间隔数据类型的值可以与其他日期值进行数学运算,但是数据库并不支持数据类型间任意的进行加、减、乘、除运算。

您可查看:

示例 1:间隔数据类型与间隔数据类型之间值的运算,其返回值仍为间隔数据类型。

  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;

返回结果:

  1. +---------------+----------------+
  2. | calculate1 | calculate2 |
  3. +--------------------------------+
  4. | +000000001-01 | +000000003-03 |
  5. +---------------+----------------+

示例 2:间隔数据类型与日期时间数据类型之间值的运算,其返回值为日期数据类型。

SYSDATE 返回当前的时间 2020-02-27 16:13:50,以下示例会返回从现在起两个月后的日期值。数据库只支持间隔+日期时间,间隔-日期时间是无效运算。但是日期时间+间隔和日期时间-间隔都是有效运算。

  1. SELECT TO_CHAR(INTERVAL '2' MONTH +SYSDATE,'YYYY-MM-DD HH24:MI:SS') calculate3 FROM DUAL;

返回结果:

  1. +---------------------+
  2. | calculate3 |
  3. +---------------------+
  4. | 2020-04-27 16:13:50 |
  5. +---------------------+

示例 3:间隔数据类型和数值数据类型之间值的运算,返回的值仍为间隔数据类型。间隔可以与数字进行乘除运算。以下示例展示了间隔 2 月乘以 2 的计算和间隔 2 天除以 3 的计算。

  1. SELECT INTERVAL '2' MONTH*2 calculate4, INTERVAL '2' DAY/3 calculate5 FROM DUAL;

返回结果为间隔 4 月和间隔 16 小时:

  1. +---------------+-------------------------------+
  2. | calculate4 | calculate5 |
  3. +---------------+-------------------------------+
  4. | +000000000-04 | +000000000 16:00:00.000000000 |
  5. +---------------+-------------------------------+

更多信息