MySQL INTERVAL函数
一、MySQL INTERVAL函数 语法
MySQL INTERVAL是一个运算符,它基于二分查找算法来查找item,返回从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描述了与表达式关联的单位的标准格式,如下表所示:
单元 | 表达式 |
---|---|
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 INTERVAL函数 示例
让我们通过各种示例了解如何在 MySQL 中使用INTERVAL表达式。以下查询将 5 天添加到 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 表中使用INTERVAL函数。首先,我们将使用以下语句创建一个名为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 函数,该函数将剩余天数减去间隔值指定的 7 天。执行语句后,我们将得到以下输出:
热门文章
优秀文章