MySQL INTERVAL
MySQL interval是一个运算符,它基于二进制搜索算法来搜索项目并返回从0到N的值。主要是
用于计算日期和时间的值。
我们可以使用以下
语法创建间隔值:
在以上语法中,
expr 用于确定间隔值,而
unit 表示间隔单位。
例如,如果我们要创建两天的间隔,则可以使用以下表达式:
请注意,
INTERVAL 和
UNIT 不区分大小写。因此,下面的表达式等同于前面的表达式:
我们可以将
日期和时间的间隔值用作以下语句:
date + INTERVAL expr unit
date-INTERVAL expr unit
间隔值也可以在各种时间函数中使用,例如DATE_SUB,DATE_ADD,TIMESTAMPDIFF,TIMESTAMPADD等。
MySQL 描述了
与表达式关联的单位的标准格式,如下表所示:
Unit |
Expr |
DAY |
DAYS |
DAY_HOUR |
'DAYS HOURS' |
DAY_MICROSECOND |
'DAYS HOURS: MINUTES: SECONDS.MICROSECONDS' |
DAY_MINUTE |
'DAYS HOURS: MINUTES' |
DAY_SECOND |
'DAYS HOURS: MINUTES: SECCONDS' |
HOUR |
HOURS |
HOUR_MICROSECOND |
'HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_SECOND |
'HOURS: MINUTES: SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
MICROSECOND |
MICROSECONDS |
MINUTE |
MINUTES |
MINUTE_MICROSECOND |
'MINUTES: SECONDS.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES: SECONDS' |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
SECOND |
SECONDS |
SECOND_MICROSECOND |
SECONDS.MICROSECONDS' |
WEEK |
WEEKS |
YEAR |
YEARS |
YEAR_MONTH |
'YEARS-MONTHS' |
MySQL间隔示例
让我们通过各种示例了解如何在MySQL中使用间隔表达式。以下查询向2020年2月1日添加了五天,并返回2020年2月6日:
mysql> SELECT '2020-02-01' + INTERVAL 5 DAY AS DATE;
它将返回以下输出:
如果我们指定 DATE或DATETIME 作为表达式右侧的间隔值,expr的负值可以是用过的。请参见以下示例:
mysql> SELECT '2020-02-01' + INTERVAL-5 DAY AS DATE;
我们将得到如下输出:
接下来,我们将请参见使用
DATE_SUB 和
DATE_ADD 函数从日期值中添加或减去日期/月份/时间。请参阅以下语句:
mysql> SELECT DATE_ADD('2020-02-01', INTERVAL 3 MONTH) AS MONTH_LATER,
DATE_SUB('2020-02-01',INTERVAL 3 MONTH) AS MONTH_BEFORE;
它将返回以下输出:
现在,我们将使用以下查询中的
TIMESTAMPADD(单位,间隔,表达式)函数,它将使时间戳记值增加45分钟:
mysql> SELECT TIMESTAMPADD(MINUTE, 45, '2020-02-01') MINUTES_LATER;
我们将看到以下输出:
让我们看看用法MySQL表中的时间间隔。首先,我们将使用以下语句创建一个名为
service_memberships 的新表:
CREATE TABLE service_memberships (
id int AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(55) NOT null,
email VARCHAR(55) NOT null,
plan VARCHAR(45) NOT null,
validity_date DATE NOT null
);
接下来,我们将使用
INSERT 语句将记录填充到表中,如下所示:
INSERT INTO service_memberships(name, email, plan, validity_date)
VALUES('Stephen', 'stephen@lidihuo.com','Gold','2020-06-13'),
('Jenifer', 'jenifer@lidihuo.com','Platinum','2020-06-10'),
('david', 'david@lidihuo.com','Silver','2020-06-15'),
('julia', 'julia@lidihuo.com','Gold','2020-06-20'),
('Alexandar','alexandar@lidihuo.com','Silver','2020-06-08');
接下来,执行
SELECT 语句来验证记录:
假设我们要
查找其成员资格在7天内过期的成员 >从2020-06-05日期开始。我们可以使用以下查询找到这些详细信息:
SELECT name, email, plan, validity_date,
DATEDIFF(validity_date, '2020-06-05') AS remaining_days
FROM service_memberships
WHERE '2020-06-05' BETWEEN DATE_SUB(validity_date, INTERVAL 7 DAY) AND validity_date;
在此语句中,我们使用了DATE_SUB函数,该函数将间隔天数指定的剩余天数减去7天。执行该语句后,我们将获得以下输出: