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 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()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菲尔莫霍斯特-免费SSL和随您增长的托管
- 下一篇: 卷云科技有限公司和-面向小型和大型企业的