MySQL – php – 解決如查詢2012年2月有開展的展覽有哪些的方法
主要解決
- 指定日期,查詢包含在資料的開始日期與結束日期。
- 當指定 N年N月,查詢有哪些資料是在這期間的時候。
- 例如:查詢2012年2月有開展的展覽有哪些。
情況範例
若指定 2012-02 做查詢,符合的條件會有
- 2012-02-01 ~ 2012-07-01 // 該月第一天是符合的
- 2012-02-最後一天 ~ 2012-07-01 // 該月最後一天也算符合條件。但是如2月的最後一天是幾號呢?交由函式自動判斷
或
- 2012-01-01 ~2013-01-01 // 該月之前的月份是符合的
- 2011-01-31 ~ 2013-01-01 // 就算跨了年份也是符合的
SQL 條件範例
查詢輸入
$year = "2012"; //搜尋的年份 $month = "2"; //搜尋的月份
資料表欄位
- “starttime” :紀錄開始日如 2012-01-01 08:00:00 或 2012-01-01
- “endtime” :記錄結束日
WHERE 條件
- 先取得指定年月份,添加第一天,再轉為戳記( 函式為 UNIX_TIMESTAMP )
- 取得 開始日 的第一天,先格式化為年月日,再轉為戳記
- 取得 結束日 並查詢最後一天( 函式為 last_day ),再轉為戳記
- 使用 between A and B
WHERE UNIX_TIMESTAMP('{$year}-{$month}-01') between UNIX_TIMESTAMP(DATE_FORMAT(starttime, '%Y-%m-01')) and UNIX_TIMESTAMP(last_day(endtime)) ";
結論
把『指定日期、開始日期』,都轉成月份的第一天,再來比對會比較方便。這樣可以解決查詢『2月』時,開始日是2月28日也涵蓋進來--因為兩個都轉成2月1日了。