MySQL YEAR函数
简介:在本教程中,您将学习如何使用MySQL YEAR函数从日期值中获取年份。
MySQL YEAR函数简介
YEAR()函数采用日期参数,并返回日期的年份。
请参见YEAR()函数的语法:
YEAR(date);
YEAR()函数返回的年份值在1000到9999之间。
如果日期为零,则YEAR()函数返回0。
以下示例返回2017年1月1日这一年。
SELECT YEAR('2017-01-01'); +--------------------+ | YEAR('2017-01-01') | +--------------------+ | 2017 | +--------------------+ 1 row in set (0.00 sec)
以下语句返回当前年份:
SELECT YEAR(NOW()); +-------------+ | YEAR(NOW()) | +-------------+ | 2017 | +-------------+ 1 row in set (0.00 sec)
在此示例中,YEAR()函数返回由NOW()函数提供的当前日期和时间的年份信息。
如果日期为NULL,则YEAR()函数将返回NULL,如以下示例所示:
SELECT YEAR(NULL); +------------+ | YEAR(NULL) | +------------+ | NULL | +------------+ 1 row in set (0.00 sec)
如前所述,零日期的YEAR()为零:
SELECT YEAR('0000-00-00'); +--------------------+ | YEAR('0000-00-00') | +--------------------+ | 0 | +--------------------+ 1 row in set (0.00 sec)
让我们看看示例数据库中的订单表。
以下查询使用YEAR()函数获取每年发货的订单数。
SELECT YEAR(shippeddate) year, COUNT(ordernumber) orderQty FROM orders WHERE shippeddate IS NOT NULL GROUP BY YEAR(shippeddate) ORDER BY YEAR(shippeddate);
在此示例中,我们使用YEAR()函数从发货日期中提取年份信息,并使用COUNT()函数计算已交付订单的数量。
GROUP BY子句按年份对订单数进行分组。
MySQL YEAR函数和索引
目前,MySQL不支持函数索引。
这意味着如果索引可用于列,则表达式YEAR(column)将不会利用索引。
我们将创建一个名为dates的新表用于演示:
CREATE TABLE dates ( id INT PRIMARY KEY AUTO_INCREMENT, dt DATE );
dt列将存储日期数据。
以下语句在日期表的dt列上创建索引。
CREATE INDEX idx_td ON dates(dt);
我们将在日期表中插入很多日期。
最简单的方法是使用递归CTE生成日期系列,然后将此日期系列插入dates表中。
以下递归CTE生成介于" 1800-01-01"和" 2020-12-31"之间的日期:
WITH RECURSIVE dates (dt) AS ( SELECT '1800-01-01' UNION ALL SELECT dt + INTERVAL 1 DAY FROM dates WHERE dt + INTERVAL 1 DAY <= '2020-12-31' ) SELECT dt FROM dates;
要将此日期系列插入日期表,请使用以下INSERT语句:
INSERT INTO dates(dt) WITH RECURSIVE dates (dt) AS ( SELECT '1800-01-01' UNION ALL SELECT dt + INTERVAL 1 DAY FROM dates WHERE dt + INTERVAL 1 DAY <= '2020-01-01' ) SELECT dt FROM dates;
您可以使用以下查询在日期表中找到行数:
SELECT COUNT(*) FROM dates;
日期表有80354行。
要获取2014年的所有日期,请使用以下查询:
SELECT * FROM dates WHERE YEAR(dt) = 2014;
要么
SELECT * FROM dates WHERE dt BETWEEN '2014-01-01' and '2014-12-31';
两个查询均返回365行,这是正确的。
但是,在性能方面存在差异。
第一个查询检查日期表中的所有行和索引中的某些行,而第二个查询仅使用索引,这要快得多。
查看两个查询的解释:
EXPLAIN SELECT * FROM dates WHERE YEAR(dt) = 2014;
和
EXPLAIN SELECT * FROM dates WHERE dt BETWEEN '2014-01-01' and '2014-12-31';
即使MySQL YEAR()函数很方便,但在性能方面,您仍应始终考虑使用它。
在本教程中,我们向您介绍了MySQL YEAR()函数,并提供了一些使用它的示例。