由于各种因素(包括月份长度的变化),使用月份可能很难。为了简化数据库开发人员的工作,大多数关系数据库(DBMS)提供了 MONTH() 和 MONTHNAME() 之类的函数。这两个函数非常适合按月对结果进行分组并显示其值。在今天的文章中,我们将学习如何使用专门的 SQL 函数来使用月份。
使用月份函数
MONTH() 和 MONTHNAME() 函数均在 MySQL 中使用。但是,每种数据库类型都有自己的日期和时间函数,因此你可能需要参考文档以找到数据库的等效函数。为了说明这一点,SQL Server 就不提供 MONTHNAME() 函数。而是可以使用 DATENAME() 返回任何日期部分,包括月份名。
Navicat 的自动完成列表大大简化了为 DBMS 查找正确的日期函数。它不仅仅是包括内置函数,还包括从表和视图以及存储过程和用户函数。以下是 MONTH() 函数:
选择函数或过程后,会将其插入到 SQL 编辑器光标的位置,并带有可通过 TAB 键聚焦输入参数,以备填写:
MONTH() 和 MONTHNAME() 的描述
MONTH() 函数接受日期输入,并返回一个整数值,该整数值在 1到 12 之间表示指定日期的月份:
同时,MONTHNAME() 返回指定日期的月份名:
使用 MONTH() 和 MONTHNAME() 函数
同时使用这两个函数,可以在显示月份名时按月份顺序进行分组和/或排序。若要查看它们的实际效果,我们可以针对 Sakila 示例数据库编写一个查询,该查询显示给定月份的电影租金。如果你不熟悉 Sakila 示例数据库,它是 MySQL 的学习数据库,代表一间虚拟的电影租赁连锁店。以下是Navicat for MySQL中 rental 表的前几行数据:
现在,让我们选择租借日期和一些电影详细信息(按 rental_date 和电影标题排序):
为了将结果限制在给定的月份,我们可以添加一个包含 MONTH() 函数的 WHERE 子句,如下所示:
若要查看月份名,我们只需要在列列表中包含 MONTHNAME() 函数即可:
按月和年筛选结果
如果未在 WHERE 子句中指定年份,则按指定月份筛选,并将显示横跨所有年份数据的结果。在许多情况下,这不是你想要的。解决方案是在 WHERE 子句中包含 YEAR() 和 MONTH() 函数。以下昰将查询结果限制为 2005 年 5 月的已更新查询:
总结
诸如 MONTH() 和 MONTHNAME() 之类的数据库函数对于按月对结果进行分组并显示其值非常有用。MySQL 支持我们今天介绍的两个函数(如果包括 YEAR(),则为三个)。对于其他数据库,请务必参考文档以找到其等效的函数。然后,你可以使用 Navicat 的自动建议功能将适当的函数插入 SQL 语句中。