3.1 处理日期和时间的函数列表

日期和时间是数据库中存储的最常见的数据类型之一。这就是为什么使用它们的函数列表非常大。以下是最受欢迎的:

# 功能 描述
1个 CURDATE() 返回当前日期
2个 时间() 返回当前时间
3个 现在(),当地时间() 返回当前日期和当前时间
4个 年() 从日期返回年份
5个 月() 返回日期中的月份
6个 日(),日月() 返回日期中的日期
7 小时() 仅从时间返回数小时
8个 分钟() 宣布时间分钟
9 第二() 从时间返回秒数
10 日名() 返回星期几的名称:星期一,...
十一 月名() 返回月份名称:January, ...
12 星期() 从日期返回周
13 工作日() 返回星期几的数字:星期一 - 0,星期二 - 1
14 年周() 返回一年中的第几周
15 星期几() 返回星期几的数字:周日 - 1,周一 - 2
16 年年日() 返回一年中的第几天:1-366
17 日期() 仅返回“datetime”对象的日期
18 添加() 向日期添加天数
19 SUBDATE() 从日期中减去天数
20 添加时间() 不定时添加
21 子时间() 从时间中减去时间

我特意将功能分成小组,以便更容易理解如何使用它们。下面我们将考虑每组中的一个函数。

您可以在链接中找到用于处理日期和时间的函数的完整列表: https: //dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

3.2 调用函数

顺便说一句,既然我们正在学习这么多函数,我认为提及运算符SELECT不必与 一起使用是有帮助的FROM。它可以返回任何表达式的值。模板给出了其一般视图:

SELECT expression

如果你想调用一些函数,那么你需要编写如下代码:

SELECT function(options)

SELECT下面我将给出一些不借助表格的运算符的操作示例:

# 要求 结果
1个 选择 1+1 2个
2个 选择 13 MOD 5 3个
3个 选择兰德() 0.20771444235715497
4个 选择CURDATE() 2022-06-04
5个 选择时间() 00:06:02
6个 现在选择() 2022-06-04 00:06:43

而且,如您所见,在上表中,为了获取当前日期和时间,您只需要使用以下函数之一:

  • CURDATE()- 当前日期;
  • CURTIME()- 当前时间;
  • NOW()– 当前日期和时间。

3.3 按年月分组数据

让我们回忆一下我们的任务表,其中包含员工的任务。让我们尝试按年份对该表中的任务进行分组。为此,我们使用函数YEAR(),它返回传递给它的日期的年份。

我们查询的第一个版本将如下所示:

SELECT
    id,
    employee_id ,
    name,
    YEAR(deadline) AS year,
    deadline
FROM task

此查询的结果将是:

ID 员工ID 姓名 最后期限
1个 1个 修复一个前端bug 2022年 2022-06-01
2个 2个 修复后端的一个bug 2022年 2022-06-15
3个 5个 买咖啡 2022年 2022-07-01
4个 5个 买咖啡 2022年 2022-08-01
5个 5个 买咖啡 2022年 2022-09-01
6个 (无效的) 打扫办公室 (无效的) (无效的)
7 4个 享受生活 (无效的) (无效的)
8个 6个 享受生活 (无效的) (无效的)

我们可以看到所有行都有相同的年份,所以让我们使用两个字段 - 年份和月份。我们查询的第二个版本将如下所示:

SELECT
    id,
    employee_id ,
    name,
    YEAR(deadline) AS year,
    MONTH(deadline) AS month,
    deadline
FROM task

此查询的结果将是:

ID 员工ID 姓名 最后期限
1个 1个 修复一个前端bug 2022年 6个 2022-06-01
2个 2个 修复后端的一个bug 2022年 6个 2022-06-15
3个 5个 买咖啡 2022年 7 2022-07-01
4个 5个 买咖啡 2022年 8个 2022-08-01
5个 5个 买咖啡 2022年 9 2022-09-01
6个 (无效的) 打扫办公室 (无效的) (无效的) (无效的)
7 4个 享受生活 (无效的) (无效的) (无效的)
8个 6个 享受生活 (无效的) (无效的) (无效的)

我不会告诉你如何按年和月对任务进行分组——你已经学过这个:使用运算符GROUP BY