INTERVAL数据类型存储表示时间跨度的值。

语法

INTERVAL类型的常量值可以使用解释文本( interpreted literal)表示,或者使用类型INTERVAL注释的字符串文本或强制类型INTERVAL来表示。

INTERVAL常量可以使用以下格式表示:

Format Description
SQL Standard INTERVAL 'Y-M D H:M:S'

Y-M D:使用单个值仅定义天数; 使用两个值定义年份和月份。 值必须是整数。

H:M:S:使用单个值仅定义秒; 使用两个值定义小时和分钟。 值可以是整数或浮点数。

注意:每一项都是可选的。
ISO 8601 INTERVAL 'P1Y2M3DT4H5M6S'
Traditional PostgreSQL INTERVAL '1 year 2 months 3 days 4 hours 5 minutes 6 seconds'
Golang INTERVAL '1h2m3s4ms5us6ns'

注意ms是毫秒,'us是微秒,ns`是纳秒。 此外,所有字段都支持整数和浮点数。

CockroachDB还支持在预期的INTERVAL值的上下文中使用未解释的字符串文本(uninterpreted string literals)。

Intervals在内部存储为月,日和纳秒。

大小

INTERVAL列支持宽度最多24个字节的值,但由于CockroachDB元数据因素,总存储大小可能更大。

示例

> CREATE TABLE intervals (a INT PRIMARY KEY, b INTERVAL);
CREATE TABLE
> SHOW COLUMNS FROM intervals;
+-------+----------+-------+---------+
| Field |   Type   | Null  | Default |
+-------+----------+-------+---------+
| a     | INT      | false | NULL    |
| b     | INTERVAL | true  | NULL    |
+-------+----------+-------+---------+
> INSERT INTO intervals VALUES
  (1, INTERVAL '1h2m3s4ms5us6ns'),
  (2, INTERVAL '1 year 2 months 3 days 4 hours 5 minutes 6 seconds'),
  (3, INTERVAL '1-2 3 4:5:6');
INSERT 3
> SELECT * FROM intervals;
+---+------------------+
| a |        b         |
+---+------------------+
| 1 | 1h2m3.004005006s |
| 2 | 14m3d4h5m6s      |
| 3 | 14m3d4h5m6s      |
+---+------------------+
(3 rows)

支持的转换

INTERVAL可以转换为以下任何数据类型:

Type Details
INT 转换为秒数(秒精度)
DECIMAL 转换为秒数(纳秒精度)
FLOAT 转换为皮秒数
STRING 转换为h-m-s格式(纳秒精度)
TIME New in v2.0: 转换为HH:MM:SS.SSSSSS,相当于午夜后的间隔时间(微秒精度)

See Also

Data Types