我们在用 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 这两笔资料。
