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 天。执行语句后,我们将得到以下输出:

热门文章

优秀文章