欲依「登記日期」欄位篩選特定月份資料,除 `BETWEEN` 外,最直觀的是使用資料庫內建的日期部分擷取函數。
-- 篩選 2016 年 1 月
WHERE DATEPART(year, 登記日期) = 2016
AND DATEPART(month, 登記日期) = 1
-- 或簡寫
WHERE YEAR(登記日期) = 2016 AND MONTH(登記日期) = 1
WHERE YEAR(`登記日期`) = 2016 AND MONTH(`登記日期`) = 1
WHERE EXTRACT(YEAR FROM 登記日期) = 2016
AND EXTRACT(MONTH FROM 登記日期) = 1
WHERE EXTRACT(YEAR FROM 登記日期) = 2016
AND EXTRACT(MONTH FROM 登記日期) = 1
對大量資料表,`FUNCTION(column) = value` 會導致**全表掃描**,無法使用索引。高效能寫法改用範圍查詢配合索引:
-- 利用索引的寫法(需登記日期有索引)
WHERE 登記日期 >= '2016-01-01' AND 登記日期 < '2016-02-01'
若僅偶爾查詢、資料量不大,`YEAR()`/`MONTH()` 寫法可讀性最高;若為高頻大量查詢,請改用範圍條件並建立索引。