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_before
和 three_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_start
和 week_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 还提供了一些与日期和时间运算相关的函数,例如:
DATE_ADD(date, INTERVAL expr unit)
:等价于date + INTERVAL expr unit
,表示将date
加上expr
个unit
,得到一个新的日期或时间值。DATE_SUB(date, INTERVAL expr unit)
:等价于date - INTERVAL expr unit
,表示将date
减去expr
个unit
,得到一个新的日期或时间值。DATEDIFF(date1, date2)
:返回两个日期之间的天数差,即date1 - date2
。TIMEDIFF(time1, time2)
:返回两个时间之间的时间差,即time1 - time2
。ADDDATE(date, days)
:等价于date + INTERVAL days DAY
,表示将date
加上days
天,得到一个新的日期或时间值。SUBDATE(date, days)
:等价于date - INTERVAL days DAY
,表示将date
减去days
天,得到一个新的日期或时间值。
结论
INTERVAL 表达式是 MariaDB 中处理日期和时间运算的一个强大的工具,它可以让我们方便地对日期和时间进行加减运算,得到新的日期或时间值。我们可以根据不同的时间单位,使用不同的 INTERVAL 表达式,来实现不同的需求。我们还可以结合其他的日期和时间函数,来进行更复杂的运算和查询。希望这篇文章能够帮助您了解和使用 INTERVAL 表达式。