转载自  MySQL year()函数

MySQL YEAR函数简介

YEAR()函数接受date参数,并返回日期的年份。请参阅YEAR()函数的语法:

YEAR(date);

YEAR()函数返回一个指定日期的年份值,范围为10009999,如果日期为零,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
WHEREshippeddate 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 ALLSELECT dt + INTERVAL 1 DAY FROM datesWHERE 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 ALLSELECT dt + INTERVAL 1 DAY FROM datesWHERE dt + INTERVAL 1 DAY <= '2020-01-01'
)
SELECT dt FROM dates;

您可以使用以下查询查找orders表中的行数:

SELECT COUNT(*)
FROMdates;

现在可以看到,dates表共有80354行记录。

要获取2014年的所有日期,请使用以下查询:

SELECT *
FROMdates
WHEREYEAR(dt) = 2014;

或者 -

SELECT *
FROMdates
WHEREdt BETWEEN '2014-01-01' and '2014-12-31';

两个查询返回365行,这是正确的。

但是,性能方面存在差异。第一个查询检查日期表中的所有行和索引中的某些行,而第二个查询中使用更快的索引。

请参阅EXPLAIN的两个查询:

EXPLAIN SELECT *
FROMdates
WHEREYEAR(dt) = 2014;

第二个语句 -

EXPLAIN SELECT *
FROMdates
WHEREdt BETWEEN '2014-01-01' and '2014-12-31';

即使MySQL YEAR()函数很方便,当涉及到性能时,您应该始终考虑使用它。

在本教程中,我们向您介绍了MySQL YEAR()函数,并给出了使用它的一些示例。

MySQL year()函数相关推荐

  1. oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...

    我有兴趣知道是否有任何MySQL / Oracle函数给增量号.在另一列相似的值的基础上的一列? 就像在我的下面的代码中,我有order_primary列,其中包含订单号.所以基于此我们可以确定有多少 ...

  2. ipad php mysql_PHP中的MYSQL常用函数

    PHP中的MYSQL常用函数 1.mysql_connect()-建立数据库连接 格式: resource mysql_connect([string hostname [:port] [:/path ...

  3. mysql 本周函数_【转】MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据...

    MySQL时间函数的使用:查询本周.上周.本月.上个月份的数据[转] /*今天*/ select * from 表名 where to_days(时间字段) = to_days(now()); /*昨 ...

  4. mysql聚合函数count用法_MySQL中聚合函数count的使用和性能优化技巧

    本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是 ...

  5. MySQL STR_TO_DATE函数

    转: MySQL STR_TO_DATE函数 2017年12月05日 15:41:58 木林森淼 阅读数:23822 版权声明:水平有限,如有补充或更正,望大家评论指正 https://blog.cs ...

  6. MYSQL 加密函数的用法

    常见加密函数有md5,hash,password等,mysql应用web一般都是md5,32位的,下面讲将MYSQL 加密函数的用法.1,md5加密用法select md5('admin');2,pa ...

  7. Mysql 常用函数(19)- mod 函数

    Mysql常用函数的汇总,可看下面文章 https://www.cnblogs.com/poloyy/p/12890763.html mod 的作用 求余数,和%一样 mod的语法格式 mod(n,m ...

  8. mysql自定义函数应用_mysql functions实例:在自定义函数中应用字符串函数

    分享一段mysql自定义函数的代码,在其中用到了mysql的字符串函数length. 代码: mysql> delimiter $$ mysql> CREATE FUNCTION myFu ...

  9. mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...

    /* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/ -- 1 运算符优先级  /* 12.1.1. 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符 ...

  10. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

最新文章

  1. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY15-规则学习
  2. html中怎么获取搜索框中的值,百度API 搜索框,获取相应的地点的uid
  3. 重新学习Spring2——IOC和AOP原理彻底搞懂
  4. xampp mysql 查询很慢_如何开启mysql的慢查询机制
  5. 小米10之后摩托罗拉Edge+也要用一亿像素相机,还有3.5耳机孔
  6. 文件服务器 ip,共享文件服务器的ip地址
  7. 大学生计算机考试题题库,大学生统考计算机一级考试试题题库(供参考)
  8. 自定义一个可以使用foreach语句进行迭代的类(IEnumerable)
  9. 北京亚信科技java笔试题_亚信科技java面试题及答案
  10. Linux网络编程——UDP编程
  11. golang 常用配置
  12. MyEclipse集成SVN插件subclipse
  13. 啊哈c语言114页习题:设计一个小人,让它从右边向左边奔跑
  14. javascript 上传的Excel格式校验
  15. 4.蒙特卡洛(Monte-Carlo, MC)+时序差分(Temporal Difference, TD)
  16. 实践一 网络攻防环境的搭建
  17. 如何旋转树莓派的显示屏幕
  18. 从拖延到高效,我推荐这7本书
  19. 阿里云轻量服务器使用一年使用体验(个人心得,仅供参考)
  20. “排队” 用英语怎么说

热门文章

  1. java swing 控件拖动_java swing中实现拖拽功能示例
  2. 《C++ Primer》13.1.6节练习(部分)
  3. [蓝桥杯2017初赛]方格分割-dfs+思维
  4. [蓝桥杯2019初赛]特别数的和-枚举
  5. 算法-排序-k排序(算法导论第三版第八章思考题8-5)
  6. And Then There Was One POJ - 3517(变形约瑟夫环+规律)
  7. javascript php 传值,js 传值到 PHP 有关问题
  8. python做接口自动化如何输出测试报告-python生成接口自动化测试报告模版
  9. 应用服务器——JBoss架构分析
  10. Java修炼之路——基础篇——String