INTERVAL 数据类型保存时间间隔。它包含多个子类型:
所有这些子类型均描述时间间隔,并且全部可参与 INTERVAL 类型的整个操作;例如,用类型 DATE、TIME 或 TIMESTAMP 的值执行添加和抽取操作。
使用 CAST 函数从一个子类型强制转换为另一个子类型,但以年和月,或月描述的时间间隔除外,因为这些类型无法转换为以日、小时、分钟和秒描述的时间间隔。
因为每月中的天数是变化的,将引起月和天之间的割裂。月和天的时间间隔没有意义,且无法转换为仅与天数等价的时间间隔。
时间间隔字面值由以下语法定义:
INTERVAL <interval string> <interval qualifier>
时间间隔字符串和时间间隔限定符的格式由下表定义。
时间间隔限定符 | 时间间隔字符串格式 | 示例 |
---|---|---|
YEAR | ‘<year>’或‘<sign> <year>’ | ‘10’或‘-10’ |
YEAR TO MONTH | ‘<year>-<month>’或‘<sign> <year>-<month>’ | ‘2-06’或‘- 2-06’ |
MONTH | ‘<month>’或‘<sign> <month>’ | ‘18’或‘-18’ |
DAY | ‘<day>’或‘<sign> <day>’ | ‘30’或‘-30’ |
DAY TO HOUR | ‘<day> <hour>’或‘<sign> <day> <hour>’ | ‘1 02’或‘-1 02’ |
DAY TO MINUTE | ‘<day> <hour>:<minute>’或‘<sign> <day> <hour>:<minute>’ | ‘1 02:30’或‘-1 02:30’ |
DAY TO SECOND | ‘<day> <hour>:<minute>:<second>’或‘<sign> <day> <hour>:<minute>:<second>’ | ‘1 02:30:15’或‘-1 02:30:15.333’ |
HOUR | ‘<hour>’或‘<sign> <hour>’ | ‘24’或‘-24’ |
HOUR TO MINUTE | ‘<hour>:<minute>’或‘<sign> <hour>:<minute>’ | ‘1:30’或‘-1:30’ |
HOUR TO SECOND | ‘<hour>:<minute>:<second>’或‘<sign> <hour>:<minute>:<second>’ | ‘1:29:59’或‘-1:29:59.333’ |
MINUTE | ‘<minute>’或‘<sign> <minute>’ | ‘90’或‘-90’ |
MINUTE TO SECOND | ‘<minute>:<second>’或‘<sign> <minute>:<second>’ | ‘89:59’或‘-89:59’ |
SECOND | ‘<second>’或‘<sign> <second>’ | ‘15’或‘-15.7’ |
在时间间隔同时包含年和月值的地方,在这两个值之间使用连字符。在该实例中,月值必须在 [0, 11] 范围内。如果时间间隔包含月值,但不包含年值,则月值是不受约束的。
空格用于将天与时间间隔的剩下部分分隔开。
如果时间间隔包含多个 HOUR、MINUTE 和 SECOND,则需要冒号来分隔值并且除最左边以外,所有都按如下所示进行限制:
时间间隔中最左侧的值的最大值为 +/- 2147483647。
有效时间间隔值的一些示例有:
无效时间间隔值的一些示例有:
指定了“天”字段,因此“小时”字段约束为 [0,23]。
指定了“小时”字段,因此“分钟”约束为 [0,59]。
此处是时间间隔文字的一些示例:
INTERVAL '1' HOUR INTERVAL '90' MINUTE INTERVAL '1-06' YEAR TO MONTH