mysql中year()_MySQL year()函数
在本教程中,您将学习如何使用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()函数相关推荐
- MySQL中常见的单行函数(下)
MySQL中常见的单行函数(下) 一.转换函数 Date_format(date,format) 将日期转换成字符串(类似Oracle中的to_char()) Str_to_date(str,fo ...
- java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数
java:去除字符串中空格 http://www.cnblogs.com/LiuChunfu/p/5661810.html oracle:oracle (+) https://zhidao.baidu ...
- MySQL中AES_ENCRYPT('密码','钥匙')函数 可以对字段值做加密处理
MySQL中AES_ENCRYPT('密码','钥匙')函数 可以对字段值做加密处理 AES_DECRYPT(表的字段名字,'钥匙')函数 解密处理 例,表结构: 现在插入一条数据,对p ...
- MySQL中常用日期时间函数及获得
MySQL中常用日期时间函数: 下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DA ...
- mysql 中常用的聚合函数的使用
mysql 中常用的聚合函数的使用 文章目录 1 count 函数 2 sum 函数 3 avg 函数 计算平均值 4 max 和min 函数 求最大值 ,最小值 总结 参考文档: 什么是聚合函数: ...
- mysql中from unixtime,mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
摘要 腾兴网为您分享:mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别,作业大师,智慧大学,优化大师,先游等软件知识,以及流星蝴蝶剑,升学指导网软件,承德大宗,q ...
- MySQL 中的常用日期函数
MySQL 中的常用日期函数: 函数 描述 NOW() 返回当前的日期和时间 CURDATE() 返回当前的日期 CURTIME() 返回当前的时间 DATE() 提取日期或日期/时间表达式的日期部分 ...
- 聊一聊Mysql中的字符串拼接函数
生死看淡,上来就干! 简单来说,Mysql中的字符串拼接函数主要有三个,分别是CONCAT().CONCAT_WS()以及GROUP_CONCAT():废话不多说,下面就每个函数具体来看一下: 1.C ...
- split mysql的用法_mysql split函数用法实例
首先,大家要知道的是,在mysql中并没有split函数,需要自己写. 比如下面几个mysql split函数的例子. 例1,获得按指定字符分割的字符串的个数: 复制代码 代码示例: DELIMITE ...
- Mysql中rank类的函数用法
Mysql中rank类的函数用法 rank() over 作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续. 说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占 ...
最新文章
- 用python的turtle画圆-(python海龟绘图怎么增加每次画圆的半径)
- php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档
- zabbix NFS挂载 监控模板
- OpenGL渲染管线,着色器,光栅化等概念理解
- Python基础知识:当字典碰到类时会发生什么?
- JavaScript学习(五十一)—实训题
- 【Qt教程】1.11 - Qt5 标准对话框QMessageBox(关于、错误、信息、警告、问题、颜色、字体、文件对话框)
- mysql查看和修改密码策略
- mac地址是由多少个bit组成_IPv6系列-详解自动分配IPv6地址
- masm5安装教程_MASM使用方法及版本号
- android反编译apk命令,APK反编译关键命令及步骤
- html代码在线运行_在线运行html代码
- 传奇服务器如何修改地图和刷怪,传奇如何将怪物刷在指定地图?
- Openssl 编译
- 电信联通提高手机补贴
- VC++实现获取本地主机网卡信息
- [肖博数学干货]高考数学二轮复习方法之概率和统计附强化题型解析
- 输出指定要求的回文日期与字符串拼接
- Verticle in Vert.x
- GeneXus学习记录——环境搭建