在本教程中,您将学习如何使用MySQL YEAR函数从指定日期值中来获取年份值。

MySQL YEAR函数简介

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

YEAR(date);

YEAR()函数返回一个指定日期的年份值,范围为1000到9999,如果日期为零,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';

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

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

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

mysql中year()_MySQL year()函数相关推荐

  1. MySQL中常见的单行函数(下)

    MySQL中常见的单行函数(下) 一.转换函数 Date_format(date,format) 将日期转换成字符串(类似Oracle中的to_char()) Str_to_date(str,fo ...

  2. java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数

    java:去除字符串中空格 http://www.cnblogs.com/LiuChunfu/p/5661810.html oracle:oracle (+) https://zhidao.baidu ...

  3. MySQL中AES_ENCRYPT('密码','钥匙')函数 可以对字段值做加密处理

    MySQL中AES_ENCRYPT('密码','钥匙')函数 可以对字段值做加密处理        AES_DECRYPT(表的字段名字,'钥匙')函数 解密处理 例,表结构: 现在插入一条数据,对p ...

  4. MySQL中常用日期时间函数及获得

    MySQL中常用日期时间函数: 下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DA ...

  5. mysql 中常用的聚合函数的使用

    mysql 中常用的聚合函数的使用 文章目录 1 count 函数 2 sum 函数 3 avg 函数 计算平均值 4 max 和min 函数 求最大值 ,最小值 总结 参考文档: 什么是聚合函数: ...

  6. mysql中from unixtime,mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别

    摘要 腾兴网为您分享:mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别,作业大师,智慧大学,优化大师,先游等软件知识,以及流星蝴蝶剑,升学指导网软件,承德大宗,q ...

  7. MySQL 中的常用日期函数

    MySQL 中的常用日期函数: 函数 描述 NOW() 返回当前的日期和时间 CURDATE() 返回当前的日期 CURTIME() 返回当前的时间 DATE() 提取日期或日期/时间表达式的日期部分 ...

  8. 聊一聊Mysql中的字符串拼接函数

    生死看淡,上来就干! 简单来说,Mysql中的字符串拼接函数主要有三个,分别是CONCAT().CONCAT_WS()以及GROUP_CONCAT():废话不多说,下面就每个函数具体来看一下: 1.C ...

  9. split mysql的用法_mysql split函数用法实例

    首先,大家要知道的是,在mysql中并没有split函数,需要自己写. 比如下面几个mysql split函数的例子. 例1,获得按指定字符分割的字符串的个数: 复制代码 代码示例: DELIMITE ...

  10. Mysql中rank类的函数用法

    Mysql中rank类的函数用法 rank() over 作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续. 说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占 ...

最新文章

  1. 用python的turtle画圆-(python海龟绘图怎么增加每次画圆的半径)
  2. php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档
  3. zabbix NFS挂载 监控模板
  4. OpenGL渲染管线,着色器,光栅化等概念理解
  5. Python基础知识:当字典碰到类时会发生什么?
  6. JavaScript学习(五十一)—实训题
  7. 【Qt教程】1.11 - Qt5 标准对话框QMessageBox(关于、错误、信息、警告、问题、颜色、字体、文件对话框)
  8. mysql查看和修改密码策略
  9. mac地址是由多少个bit组成_IPv6系列-详解自动分配IPv6地址
  10. masm5安装教程_MASM使用方法及版本号
  11. android反编译apk命令,APK反编译关键命令及步骤
  12. html代码在线运行_在线运行html代码
  13. 传奇服务器如何修改地图和刷怪,传奇如何将怪物刷在指定地图?
  14. Openssl 编译
  15. 电信联通提高手机补贴
  16. VC++实现获取本地主机网卡信息
  17. [肖博数学干货]高考数学二轮复习方法之概率和统计附强化题型解析
  18. 输出指定要求的回文日期与字符串拼接
  19. Verticle in Vert.x
  20. GeneXus学习记录——环境搭建

热门文章

  1. 最小采样频率计算公式_速度采样频率
  2. 学计算机的怎么防辐射,一种学生用防辐射计算机的制作方法
  3. 2.自动加载(phalapi框架总结)
  4. openwrt安装docker并启动
  5. 张晓龙2018微信公开课
  6. 江苏事业单位——计算机类
  7. 0901 - 虽已马不停蹄,无奈时光飞逝
  8. pipe 半双工_linux进程间通信之管道(无名管道pipe)实现全双工双向通信
  9. HTML动漫设计公司响应式网站模板期末大作业0023
  10. 0021:孩子也是要将心比心的