INTERVAL

INTERVAL数据类型

Lakehouse提供了INTERVAL数据类型,用来表示两个日期或时间之间的时间间隔。本文为您介绍INTERVAL类型的使用方法和语法。

使用说明

INTERVAL数据类型支持两种类型的间隔:

  • INTERVAL_YEAR_MONTH:表示年月间隔,使用YEAR和MONTH字段存储时间间隔。
  • INTERVAL_DAY_TIME:表示日间间隔,使用包括小数秒在内的天、小时、分钟和秒存储间隔。

INTERVAL_YEAR_MONTH

语法格式

语法描述示例
INTERVAL '[+ | -]-' YEAR TO MONTH同时指定YEAR和MONTH间隔INTERVAL '2-3' YEAR TO MONTH 表示2年3个月
INTERVAL '[+ | -]' YEAR仅指定YEAR间隔INTERVAL '2' YEAR 表示2年
INTERVAL '[+| -]' MONTH仅指定MONTH间隔INTERVAL '3' MONTH 表示3个月

参数说明

  • year:取值范围为[0, 9999]。
  • month:取值范围为[0, 11]。

注意事项

  • 仅指定MONTH间隔时,month取值可以超过11,超过部分会折算为YEAR进行计算。

INTERVAL_DAY_TIME

语法格式

语法描述示例
INTERVAL '[+ | -]' DAY仅指定DAY间隔INTERVAL '1' DAY表示1天
INTERVAL '[+ | -]' HOUR仅指定HOUR间隔INTERVAL '23' HOUR表示23小时
INTERVAL '[+ | -]' MINUTE仅指定MINUTE间隔INTERVAL '59' MINUTE表示59分钟
INTERVAL '[+ | -]' SECOND仅指定SECOND间隔INTERVAL '59.999' SECOND表示59.999秒
INTERVAL '[+ | -] ' DAY TO HOUR同时指定DAY和HOUR间隔INTERVAL '1 23' DAY TO HOUR表示1天23小时
INTERVAL '[+ | -] ' DAY TO MINUTE同时指定DAY、HOUR和MINUTE间隔INTERVAL '1 23:59' DAY TO MINUTE表示1天23小时59分钟
INTERVAL '[+ | -] ' DAY TO SECOND同时指定DAY、HOUR、MINUTE和SECOND间隔INTERVAL '1 23:59:59.999' DAY TO SECOND表示1天23小时59分59.999秒
  • 允许 INTERVAL expr unit 时间间隔写表达式如
select interval 1+2 year as res;
+-----+
| res |
+-----+
| 3-0 |
+-----+

参数说明

  • day:取值范围为[0, 2147483647]。
  • hour:取值范围为[0, 23]。
  • minute:取值范围为[0, 59]。
  • second:取值范围为[0, 59.999999999]。

注意事项

  • 仅指定HOUR/MINUTE/SECOND间隔时,对应参数取值可以超过范围上限,超过的部分会被折算为更大的单位。

interval 类型的运算

interval 类型与 数值类型、时间日期类型可以做一些简单的算数运算

> SELECT INTERVAL 4 DAY * 2, INTERVAL 4 DAY  / 2;
8 00:00:00.000000000    2 00:00:00.000000000

> SELECT timestamp '2019-10-15' - timestamp '2019-10-14', date '2020-10-15' - date '2019-10-14';
1 00:00:00.000000000    367 00:00:00.000000000

> SELECT timestamp '2020-10-10' + INTERVAL 1 DAY, date '2020-10-10' + INTERVAL 1 MONTH;
2020-10-11 00:00:00     2020-11-10

> SELECT INTERVAL 1 DAY < INTERVAL 2 DAY;
true

interval 类型 cast

interval 类型 cast 成 string 时,会带上类型信息;

> SELECT cast('INTERVAL 1 DAY' AS INTERVAL DAY TO SECOND), cast('INTERVAL 1 DAY' AS INTERVAL DAY);
NULL

interval 类型写法更宽松

SELECT    interval 7 week;
+--------------------------------------+
| INTERVAL '49 00:00:00' DAY TO SECOND |
+--------------------------------------+
| 49 00:00:00.000000000                |
+--------------------------------------+

interval可以写在整个字符串中

SELECT    'interval 7 week';
+-------------------+
| 'interval 7 week' |
+-------------------+
| interval 7 week   |
+-------------------+

interval数字可以写到字符串中

SELECT    interval '7' week;
+--------------------------------------+
| INTERVAL '49 00:00:00' DAY TO SECOND |
+--------------------------------------+
| 49 00:00:00.000000000                |
+--------------------------------------+

数字和时间单位可以写到整个字符串中

SELECT    interval '7 week';
+--------------------------------------+
| INTERVAL '49 00:00:00' DAY TO SECOND |
+--------------------------------------+
| 49 00:00:00.000000000                |
+--------------------------------------+

联系我们
预约咨询
微信咨询
电话咨询