日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中year()_MySQL year()函数

發布時間:2023/12/18 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。