MariaDB INTERVAL 表达式的基础用法与实例

MariaDB INTERVAL 表达式用来表示一个时间段/区间。

发布于

MariaDB 是一个开源的关系型数据库管理系统,它是 MySQL 的一个分支。MariaDB 支持多种数据类型,包括日期和时间类型。在处理日期和时间类型的数据时,我们经常需要对日期和时间进行加减运算,比如计算两个日期之间的差值,或者获取某个日期的前后几天的日期。为了方便这些运算,MariaDB 提供了一个特殊的表达式,叫做 INTERVAL 表达式。

语法

INTERVAL 表达式的语法如下:

date + INTERVAL expr unit
date - INTERVAL expr unit

其中,date 是一个日期或时间类型的值,expr 是一个数值或字符串类型的值,unit 是一个表示时间单位的关键字。unit 可以是以下之一:

  • MICROSECOND:微秒,即百万分之一秒
  • SECOND:秒
  • MINUTE:分钟
  • HOUR:小时
  • DAY:天
  • WEEK:周
  • MONTH:月
  • QUARTER:季度,即三个月
  • YEAR:年

INTERVAL 表达式的含义是,根据 unit 的不同,将 date 加上或减去 expr 个时间单位,得到一个新的日期或时间值。例如,'2024-02-23' + INTERVAL 1 DAY 的结果是 '2024-02-24',表示将日期 '2024-02-23' 加上一天,得到第二天的日期。

实例

下面我们来看一些使用 INTERVAL 表达式的实例。

计算两个日期之间的天数

假设我们有一个名为 employees 的表,它存储了员工的编号、姓名、入职日期等信息。我们想要计算每个员工从入职到现在的天数,可以使用以下 SQL 语句:

SELECT
  emp_no,
  first_name,
  last_name,
  hire_date,
  CURDATE() - INTERVAL hire_date DAY AS days_since_hire
FROM
  employees;

这里,我们使用了 CURDATE() 函数,它返回当前的日期。然后,我们使用了 INTERVAL hire_date DAY 表达式,它表示将当前日期减去入职日期的天数,得到一个数值,表示从入职到现在的天数。我们将这个数值命名为 days_since_hire,并作为查询结果的一列。以下是部分查询结果:

+--------+------------+-----------+------------+-----------------+
| emp_no | first_name | last_name | hire_date  | days_since_hire |
+--------+------------+-----------+------------+-----------------+
|  10001 | Georgi     | Facello   | 1986-06-26 |           13754 |
|  10002 | Bezalel    | Simmel    | 1985-11-21 |           13901 |
|  10003 | Parto      | Bamford   | 1986-08-28 |           13681 |
|  10004 | Chirstian  | Koblick   | 1986-12-01 |           13546 |
|  10005 | Kyoichi    | Maliniak  | 1989-09-12 |           12577 |
+--------+------------+-----------+------------+-----------------+

获取某个日期的前后几天的日期

假设我们有一个名为 events 的表,它存储了一些活动的名称、日期、地点等信息。我们想要查询某个活动的前后三天的日期,可以使用以下 SQL 语句:

SELECT
  event_name,
  event_date,
  event_date - INTERVAL 3 DAY AS three_days_before,
  event_date + INTERVAL 3 DAY AS three_days_after
FROM
  events
WHERE
  event_name = 'Spring Festival';

这里,我们使用了 INTERVAL 3 DAY 表达式,它表示将日期加上或减去三天,得到前后三天的日期。我们将这两个日期命名为 three_days_beforethree_days_after,并作为查询结果的一列。以下是查询结果:

+-----------------+------------+-------------------+------------------+
| event_name      | event_date | three_days_before | three_days_after |
+-----------------+------------+-------------------+------------------+
| Spring Festival | 2024-01-29 | 2024-01-26        | 2024-02-01       |
+-----------------+------------+-------------------+------------------+

获取某个日期所在的周的第一天和最后一天

假设我们有一个名为 sales 的表,它存储了每天的销售额。我们想要查询某个日期所在的周的第一天和最后一天,以及该周的总销售额,可以使用以下 SQL 语句:

SELECT
  date,
  date - INTERVAL WEEKDAY(date) DAY AS week_start,
  date + INTERVAL 6 - WEEKDAY(date) DAY AS week_end,
  SUM(sales_amount) AS week_sales
FROM
  sales
WHERE
  date = '2024-02-23'
GROUP BY
  WEEK(date);

这里,我们使用了 WEEKDAY(date) 函数,它返回一个数值,表示 date 是星期几,从 0(星期一)到 6(星期日)。然后,我们使用了 INTERVAL WEEKDAY(date) DAY 表达式,它表示将 date 减去星期几的天数,得到该周的第一天(星期一)。类似地,我们使用了 INTERVAL 6 - WEEKDAY(date) DAY 表达式,它表示将 date 加上 6 减去星期几的天数,得到该周的最后一天(星期日)。我们将这两个日期命名为 week_startweek_end,并作为查询结果的一列。我们还使用了 SUM(sales_amount) 函数,它返回该周的总销售额。我们将这个数值命名为 week_sales,并作为查询结果的一列。我们使用了 GROUP BY WEEK(date) 子句,它表示按照 date 所在的周进行分组。以下是查询结果:

+------------+------------+------------+------------+
| date       | week_start | week_end   | week_sales |
+------------+------------+------------+------------+
| 2024-02-23 | 2024-02-19 | 2024-02-25 |    12345.6 |
+------------+------------+------------+------------+

相关函数

除了 INTERVAL 表达式,MariaDB 还提供了一些与日期和时间运算相关的函数,例如:

结论

INTERVAL 表达式是 MariaDB 中处理日期和时间运算的一个强大的工具,它可以让我们方便地对日期和时间进行加减运算,得到新的日期或时间值。我们可以根据不同的时间单位,使用不同的 INTERVAL 表达式,来实现不同的需求。我们还可以结合其他的日期和时间函数,来进行更复杂的运算和查询。希望这篇文章能够帮助您了解和使用 INTERVAL 表达式。