我們在用 PHP 進行查詢 MySQL 資料庫中"日期等於本月的資料"要怎麼寫呢?有兩種方式可以做到,分別是用 PHP 變數及用 MySQL 函數這兩種寫法,在這裡用簡單的範例做說明,假設我們在資料庫中的 table 資料表有四筆資料,分別如下:
id | name | date |
1 | Nick | 2022-05-27 |
2 | Peter | 2022-05-26 |
3 | Michelle | 2022-04-25 |
4 | Bill | 2021-05-19 |
接著我們要用 PHP 執行 SELECT 查詢資料庫中 date 在本月的資料,假設本月是 2022 年 5 月。
用 PHP 變數
$ThisMonth=date("Y-m");
SELECT name FROM table WHERE date LIKE '%$ThisMonth%';
這裡我們先設了一個 PHP 變數 $ThisMonth 並用 date 函數將變數的內容設為本月(2022-05),然後套用到 SELECT 查詢的 WHERE 子句中,利用 LIKE 來模糊查詢資料庫中 date 有 2022-05 的資料,所以這樣會查詢出 Nick 及 Peter 這兩筆資料。
用 MySQL 函數
SELECT name FROM table WHERE MONTH(date)=MONTH(now()) and YEAR(date)=YEAR(now());
此範例中使用了 MySQL的 MONTH()、now()、YEAR() 等函數,其中 MONTH 函數會返回各種日期格式的月份,例如 MONTH(2022-05-27) 會返回 5,NOW() 函數會返回現在的日期與時間,例如 2022-05-27 04:24:42 這樣的格式,把 now() 放在 MONTH() 函數中就會返回現在的月份,以範例來說就是 5 月。
YEAR() 函數則會返回一個日期的年份,例如 YEAR(2022-05-27) 就會返回 2022,now() 函數放在 YEAR() 函數中也會返回 2022,因為我們假設現在是 2022 年 5 月,範例中 YEAR(date)=YEAR(now()) 意思就是資料表中 date 年份等於今年的資料。
所以這整段 SQL 語法的 WHERE 子句意思就是「查詢資料表中 date 的月份等於這當月同時年份等於今年」,因此會查詢出 Nick 及 Peter 這兩筆資料。