MySQL INTERVAL运算符
MySQL interval是一个运算符,它基于二进制搜索算法来搜索项目并返回从0到N的值。它主要用于计算日期和时间值。
我们可以使用以下 语法 来创建一个interval值:
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 描述了与表达式相关联的单位的标准格式,下表中有示例:
单位 | 表达式 |
---|---|
天 | 天 |
天_小时 | ‘天 小时’ |
天_微秒 | ‘天 小时:分钟:秒.微秒’ |
天_分钟 | ‘天 小时:分钟’ |
天_秒 | ‘天 小时:分钟:秒’ |
小时 | 小时 |
小时_微秒 | ‘小时:分钟:秒.微秒’ |
小时_秒 | ‘小时:分钟:秒’ |
小时_分钟 | ‘小时:分钟’ |
微秒 | 微秒 |
分钟 | 分钟 |
分钟_微秒 | ‘分钟:秒.微秒’ |
分钟_秒 | ‘分钟:秒’ |
月 | 月 |
季度 | 季度 |
秒 | 秒 |
秒_微秒 | 秒.微秒’ |
周 | 周 |
年 | 年 |
年_月 | ‘年-月’ |
MySQL间隔示例
让我们通过各种示例来了解如何在MySQL中使用间隔表达式。以下 查询 将给2020年2月1日添加五天,返回2020年2月6日:
mysql> SELECT '2020-02-01' + INTERVAL 5 DAY AS DATE;
它将返回如下输出:
如果我们在表达式的右侧将 日期或日期时间 的值指定为一个时间间隔值,则可以使用 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@javatpoint.com','Gold','2020-06-13'),
('Jenifer', 'jenifer@javatpoint.com','Platinum','2020-06-10'),
('david', 'david@javatpoint.com','Silver','2020-06-15'),
('julia', 'julia@javatpoint.com','Gold','2020-06-20'),
('Alexandar','alexandar@javatpoint.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函数,该函数通过一个间隔值将剩余天数减去七天。执行该语句后,我们将得到以下输出: