| 需求 | 推薦寫法 (可用索引) | 替代寫法 (函數法、不走索引) |
| 今天 | WHERE dt >= CURDATE() AND dt < CURDATE() + INTERVAL 1 DAY | WHERE TO_DAYS(dt) = TO_DAYS(NOW()) |
| 昨天 | WHERE dt >= CURDATE() - INTERVAL 1 DAY AND dt < CURDATE() | WHERE TO_DAYS(NOW()) - TO_DAYS(dt) = 1 |
| 最近 7 天 (含今天) | WHERE dt >= CURDATE() - INTERVAL 6 DAY AND dt < CURDATE() + INTERVAL 1 DAY | WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(dt) |
| 最近 30 天 | WHERE dt >= CURDATE() - INTERVAL 29 DAY AND dt < CURDATE() + INTERVAL 1 DAY | WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(dt) |
| 本月 | WHERE dt >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND dt < DATE_FORMAT(CURDATE(), '%Y-%m-01') + INTERVAL 1 MONTH | WHERE DATE_FORMAT(dt, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m') |
| 上月 | WHERE dt >= DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, '%Y-%m-01') AND dt < DATE_FORMAT(CURDATE(), '%Y-%m-01') | WHERE PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(dt, '%Y%m')) = 1 |
| 本季度 | WHERE dt >= MAKEDATE(YEAR(CURDATE()),1) + INTERVAL QUARTER(CURDATE())-1 QUARTER AND dt < ... + INTERVAL 1 QUARTER | WHERE QUARTER(dt) = QUARTER(NOW()) |
| 上季度 | WHERE dt >= ... - INTERVAL 1 QUARTER AND dt < ... | WHERE QUARTER(dt) = QUARTER(DATE_SUB(NOW(), INTERVAL 1 QUARTER)) |
| 今年 | WHERE dt >= MAKEDATE(YEAR(CURDATE()),1) AND dt < MAKEDATE(YEAR(CURDATE())+1,1) | WHERE YEAR(dt) = YEAR(NOW()) |
| 去年 | WHERE dt >= MAKEDATE(YEAR(CURDATE())-1,1) AND dt < MAKEDATE(YEAR(CURDATE()),1) | WHERE YEAR(dt) = YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) |
| 本週 (週一開始) | WHERE dt >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND dt < ... + INTERVAL 7 DAY | WHERE YEARWEEK(dt, 1) = YEARWEEK(NOW(), 1) |
| 上週 | WHERE dt >= ... - INTERVAL 7 DAY AND dt < ... | WHERE YEARWEEK(dt, 1) = YEARWEEK(NOW(), 1) - 1 |