MySQL year()函数
发布时间:2022-11-23 16:14:02 所属栏目:MySql教程 来源:
导读: MySQL YEAR函数简介
YEAR()函数接受date参数,并返回日期的年份。请参阅YEAR()函数的语法:
YEAR(date);
YEAR()函数返回一个指定日期的年份值,范围为1000到9999,如果日期为零MySQL 函数,
YEAR()函数接受date参数,并返回日期的年份。请参阅YEAR()函数的语法:
YEAR(date);
YEAR()函数返回一个指定日期的年份值,范围为1000到9999,如果日期为零MySQL 函数,
|
MySQL YEAR函数简介 YEAR()函数接受date参数,并返回日期的年份。请参阅YEAR()函数的语法: YEAR(date); YEAR()函数返回一个指定日期的年份值,范围为1000到9999,如果日期为零MySQL 函数,YEAR()函数返回0。 以下示例返回2018-01-01日的年份,即2018。 mysql> SELECT YEAR('2018-01-01'); +--------------------+ | YEAR('2018-01-01') | +--------------------+ | 2018 | +--------------------+ 1 row in set 以下语句返回当前年份: mysql> SELECT YEAR(NOW()); +-------------+ | YEAR(NOW()) | +-------------+ | 2017 | +-------------+ 1 row in set 在本示例中,YEAR()函数返回NOW()函数提供的当前日期和时间的年份信息。 如果日期为NULL,则YEAR()函数将返回NULL,如以下示例所示: mysql> SELECT YEAR(NULL); +------------+ | YEAR(NULL) | +------------+ | NULL | +------------+ 1 row in set 如前所述,零日期的YEAR()结果为NULL(有的MySQL版本求值结果为:0): mysql> SELECT YEAR('0000-00-00'); +--------------------+ | YEAR('0000-00-00') | +--------------------+ | NULL | +--------------------+ 1 row in set 下面来看看看示例数据库(yiibaidb)中的orders表。 以下查询使用YEAR()函数来获取每年发货的订单数量,如下查询语句 - SELECT YEAR(shippeddate) year, COUNT(ordernumber) orderQty FROM orders WHERE shippeddate IS NOT NULL GROUP BY YEAR(shippeddate) ORDER BY YEAR(shippeddate); 执行上面查询语句,得到以下结果 - +------+----------+ | year | orderQty | +------+----------+ | 2013 | 110 | | 2014 | 147 | | 2015 | 55 | | 2017 | 1 | +------+----------+ 4 rows in set 在这个例子中,我们使用YEAR()函数从出货日期中提取年度信息,并使用COUNT()函数计算已发送订单的数量,GROUP BY子句按年份组合订单数量。 MySQL YEAR函数和索引 目前,MySQL没有支持函数索引。 这意味着如果在列上使用索引,表达式YEAR(column)也不会利用索引。 了方便演示,这里创建一个名为dates的新表: USE testdb; CREATE TABLE dates ( id INT PRIMARY KEY AUTO_INCREMENT, dt DATE ); dt列将存储日期数据。以下语句在dates表的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; 要将此日期序列插入到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; 您可以使用以下查询查找orders表中的行数: SELECT COUNT(*) FROM dates; 现在可以看到,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的两个查询: EXPLAIN SELECT * FROM dates WHERE YEAR(dt) = 2014; 第二个语句 - EXPLAIN SELECT * FROM dates WHERE dt BETWEEN '2014-01-01' and '2014-12-31'; 即使MySQLYEAR()函数很方便,当涉及到性能时,您应该始终考虑使用它。 在本教程中,我们向您介绍了MySQLYEAR()函数,并给出了使用它的一些示例。 (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐

