MySQL interval是一个运算符,它基于二进制搜索算法来搜索项目并返回从0到N的值。它主要用于计算日期和时间值。
无涯教程可以使用以下语法创建间隔值:
INTERVAL expr unit
在以上语法中, expr 用于确定间隔值,而 unit 表示间隔单位。 例如,如果要创建两天间隔,则可以使用以下表达式:
INTERVAL 2 DAY
请注意, INTERVAL 和 UNIT 不区分大小写。因此,下面的表达式等同于前面的表达式:
interval 2 day
可以将日期和时间间隔值用作以下语句:
date + INTERVAL expr unit date - INTERVAL expr unit
间隔值也可以在各种时间函数中使用,例如DATE_SUB,DATE_ADD,TIMESTAMPDIFF,TIMESTAMPADD等。
MySQL 描述了与该表达式关联的单元的标准格式,如下表所示:
Unit | 描述 | |
---|---|---|
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 | MINUTE | |
MINUTE_MICROSECOND | 'MINUTES:SECONDS.MICROSECONDS' | |
MINUTE_SECOND | 'MINUTES:SECONDS' | |
MONTH | MONTHS | |
QUARTER | QUARTER | |
SECOND | SECONDS | |
SECOND_MICROSECOND | SECONDS.MICROSECONDS' | |
WEEK | WEEKS | |
YEAR | YEARS | |
YEAR_MONTH | 'YEARS-MONTHS' |
让无涯教程通过各种示例了解如何在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(unit,interval,expression)函数,该函数会将时间戳记值增加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@learnfk.com','Gold','2020-06-13'), ('Jenifer', 'jenifer@learnfk.com','Platinum','2020-06-10'), ('david', 'david@learnfk.com','Silver','2020-06-15'), ('julia', 'julia@learnfk.com','Gold','2020-06-20'), ('Alexandar','alexandar@learnfk.com','Silver','2020-06-08');
接下来,执行 SELECT 语句以验证记录:
假设要找到其成员资格在2020-06-05日期后7天内过期的成员。可以使用以下查询找到这些详细信息:
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天。执行该语句后,无涯教程将获得以下输出:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)