• MySQL year()函数


    转自:https://blog.csdn.net/moakun/article/details/82528829

    MySQL YEAR函数简介

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

    YEAR(date);
    

    YEAR()函数返回一个指定日期的年份值,范围为10009999,如果日期为零,YEAR()函数返回0

    以下示例返回2018-01-01日的年份,即2018

    1.  
      mysql> SELECT YEAR('2018-01-01');
    2.  
      +--------------------+
    3.  
      | YEAR('2018-01-01') |
    4.  
      +--------------------+
    5.  
      | 2018 |
    6.  
      +--------------------+
    7.  
      1 row in set

    以下语句返回当前年份:

    1.  
      mysql> SELECT YEAR(NOW());
    2.  
      +-------------+
    3.  
      | YEAR(NOW()) |
    4.  
      +-------------+
    5.  
      | 2017 |
    6.  
      +-------------+
    7.  
      1 row in set

    在本示例中,YEAR()函数返回NOW()函数提供的当前日期和时间的年份信息。

    如果日期为NULL,则YEAR()函数将返回NULL,如以下示例所示:

    1.  
      mysql> SELECT YEAR(NULL);
    2.  
      +------------+
    3.  
      | YEAR(NULL) |
    4.  
      +------------+
    5.  
      | NULL |
    6.  
      +------------+
    7.  
      1 row in set

    如前所述,零日期的YEAR()结果为NULL(有的MySQL版本求值结果为:0):

    1.  
      mysql> SELECT YEAR('0000-00-00');
    2.  
      +--------------------+
    3.  
      | YEAR('0000-00-00') |
    4.  
      +--------------------+
    5.  
      | NULL |
    6.  
      +--------------------+
    7.  
      1 row in set

    下面来看看看示例数据库(yiibaidb)中的orders表。

    以下查询使用YEAR()函数来获取每年发货的订单数量,如下查询语句 -

    1.  
      SELECT
    2.  
      YEAR(shippeddate) year,
    3.  
      COUNT(ordernumber) orderQty
    4.  
      FROM
    5.  
      orders
    6.  
      WHERE
    7.  
      shippeddate IS NOT NULL
    8.  
      GROUP BY YEAR(shippeddate)
    9.  
      ORDER BY YEAR(shippeddate);

    执行上面查询语句,得到以下结果 -

    1.  
      +------+----------+
    2.  
      | year | orderQty |
    3.  
      +------+----------+
    4.  
      | 2013 | 110 |
    5.  
      | 2014 | 147 |
    6.  
      | 2015 | 55 |
    7.  
      | 2017 | 1 |
    8.  
      +------+----------+
    9.  
      4 rows in set
    10.  
       

    在这个例子中,我们使用YEAR()函数从出货日期中提取年度信息,并使用COUNT()函数计算已发送订单的数量,GROUP BY子句按年份组合订单数量。

    MySQL YEAR函数和索引

    目前,MySQL没有支持函数索引。 这意味着如果在列上使用索引,表达式YEAR(column)也不会利用索引。

    了方便演示,这里创建一个名为dates的新表:

    1.  
      USE testdb;
    2.  
      CREATE TABLE dates (
    3.  
      id INT PRIMARY KEY AUTO_INCREMENT,
    4.  
      dt DATE
    5.  
      );

    dt列将存储日期数据。以下语句在dates表的dt列上创建一个索引

    CREATE INDEX idx_td ON dates(dt);
    

    我们将在日期表中插入大量的日期数据。最简单的方法是使用递归CTE生成日期序列,并将此日期序列插入到dates表中。

    以下递归CTE生成“1800-01-01”“2020-12-31”之间的日期:

    1.  
      WITH RECURSIVE dates (dt) AS
    2.  
      (
    3.  
      SELECT '1800-01-01'
    4.  
      UNION ALL
    5.  
      SELECT dt + INTERVAL 1 DAY FROM dates
    6.  
      WHERE dt + INTERVAL 1 DAY <= '2020-12-31'
    7.  
      )
    8.  
      SELECT dt FROM dates;

    要将此日期序列插入到dates表中,请使用以下INSERT语句:

    1.  
      INSERT INTO dates(dt)
    2.  
      WITH RECURSIVE dates (dt) AS
    3.  
      (
    4.  
      SELECT '1800-01-01'
    5.  
      UNION ALL
    6.  
      SELECT dt + INTERVAL 1 DAY FROM dates
    7.  
      WHERE dt + INTERVAL 1 DAY <= '2020-01-01'
    8.  
      )
    9.  
      SELECT dt FROM dates;

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

    1.  
      SELECT
    2.  
      COUNT(*)
    3.  
      FROM
    4.  
      dates;

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

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

    1.  
      SELECT
    2.  
      *
    3.  
      FROM
    4.  
      dates
    5.  
      WHERE
    6.  
      YEAR(dt) = 2014;

    或者 -

    1.  
      SELECT
    2.  
      *
    3.  
      FROM
    4.  
      dates
    5.  
      WHERE
    6.  
      dt BETWEEN '2014-01-01' and '2014-12-31';

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

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

    请参阅EXPLAIN的两个查询:

    1.  
      EXPLAIN SELECT
    2.  
      *
    3.  
      FROM
    4.  
      dates
    5.  
      WHERE
    6.  
      YEAR(dt) = 2014;

    第二个语句 -

    1.  
      EXPLAIN SELECT
    2.  
      *
    3.  
      FROM
    4.  
      dates
    5.  
      WHERE
    6.  
      dt BETWEEN '2014-01-01' and '2014-12-31';

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

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

  • 相关阅读:
    JVM系列【2】Class文件结构
    JVM系列【5】JVM常用指令
    JVM系列【4】内存模型
    JVM系列【3】Class文件加载过程
    新编html网页设计从入门到精通 (龙马工作室) pdf扫描版​
    HTML5移动开发即学即用(双色) 王志刚 pdf扫描版​
    HTML5和CSS3实例教程 中文版 高清PDF扫描版
    HTML5+CSS3网站设计教程 (张晓景,胡克) [iso]
    HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
    HTML5 Canvas游戏开发实战 PDF扫描版
  • 原文地址:https://www.cnblogs.com/sharpest/p/13709697.html
Copyright © 2020-2023  润新知