Navicat 部落格

依月份篩選日期 2020 年 10 月 14 日,由 Robert Gravelle 撰寫

由於各種因素(包括月份長度的變化),使用月份可能非常困難。為了簡化資料庫開發人員的工作,大多數關聯式資料庫(DBMS)提供了 MONTH() 和 MONTHNAME() 之類的函式。這兩個函式非常適合依月份分組結果並顯示其值。在今天的文章中,我們將學習如何使用專門的 SQL 函式來使用月份。

使用月份函式

MONTH() 和 MONTHNAME() 函式均可以在 MySQL 中使用。但是,每種資料庫類型都有自己的日期和時間函式,因此你可能需要參考你的資料庫的文件以找到對應的函式。讓我舉例來說明這一點,SQL Server 就不提供 MONTHNAME() 函式。而是可以使用 DATENAME() 傳回任何日期的部分,包括月份名稱。

Navicat 的自動完成清單大大簡化了查閱你的 DBMS 的正確日期函式。它不僅僅是包括內建函式,還包括資料表和檢視以及預存程序和使用者函式。以下是 MONTH() 函式:

auto-complete (30K)

選取函式或程序後,會將其插入至 SQL 編輯器中游標所在的位置,並有可透過 TAB 鍵對焦的輸入參數,以備填寫:

monthname_function_cursor (7K)

MONTH() 與 MONTHNAME() 的描述

MONTH() 函式接受一個日期輸入,並傳回一個介於 1 與 12 之間的整數數值,表示指定日期的月份:

month_function (27K)

同時,MONTHNAME() 傳回指定日期的月份名稱:

monthname_function (29K)

使用 MONTH() 和 MONTHNAME() 函式

同時使用這兩個函式,可以在顯示月份名稱時以月份順序分組和/或排序。若要看他們實際的效果,我們可以針對 Sakila 範例資料庫撰寫一個顯示特定月份的電影租金的查詢。如果你不熟悉 Sakila 範例資料庫,它是 MySQL 提供學習用途的資料庫,代表一間虛擬的電影租賃連鎖店。以下是 Navicat for MySQL 中 rental 資料表的前幾列資料:

rental_table (337K)

現在,讓我們選取租借日期和一些電影詳細資料(以 rental_date 和電影標題排序):

rental_query (160K)

為了將結果限制在指定的月份,我們可以加入一個包含 MONTH() 函式的 WHERE 子句,如下所示:

rental_query_filtered_by_month (151K)

若要查看月份名稱,我們只需要在欄清單中包含 MONTHNAME() 函式即可:

rental_query_with_month_name (139K)

依月份和年份篩選結果

如果沒有在 WHERE 子句中指定年份,則按指定月份篩選,並將顯示橫跨所有資料年份的結果。在許多情況下,這不是你想要的。解決方案是在 WHERE 子句中包含 YEAR() 和 MONTH() 函式。以下是將查詢結果限制為 2005 年 5 月的已更新查詢:

rental_query_with_year (140K)

總結

諸如 MONTH() 和 MONTHNAME() 之類的資料庫函式對於依月份分組結果並顯示其值非常有用。MySQL 支援我們今天介紹的兩個函式(如果包括 YEAR(),就是三個了)。對於其他資料庫,請務必參考文件以找到其對應的函式。然後,你可以使用 Navicat 的自動建議功能將適當的函式插入 SQL 陳述式中。

Navicat 文章
頻道記錄
分享
部落格封存檔