首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL 按月份篩選資料:使用 DATEPART 或 MONTH 函數,避免 BETWEEN 日期字串比較陷阱

     編輯:程式設計疑難解答

欲依「登記日期」欄位篩選特定月份資料,除 `BETWEEN` 外,最直觀的是使用資料庫內建的日期部分擷取函數。

SQL Server / T-SQL


-- 篩選 2016 年 1 月
WHERE DATEPART(year, 登記日期) = 2016
  AND DATEPART(month, 登記日期) = 1

-- 或簡寫
WHERE YEAR(登記日期) = 2016 AND MONTH(登記日期) = 1

MySQL


WHERE YEAR(`登記日期`) = 2016 AND MONTH(`登記日期`) = 1

Oracle


WHERE EXTRACT(YEAR FROM 登記日期) = 2016
  AND EXTRACT(MONTH FROM 登記日期) = 1

PostgreSQL


WHERE EXTRACT(YEAR FROM 登記日期) = 2016
  AND EXTRACT(MONTH FROM 登記日期) = 1

效能提示

對大量資料表,`FUNCTION(column) = value` 會導致**全表掃描**,無法使用索引。高效能寫法改用範圍查詢配合索引:


-- 利用索引的寫法(需登記日期有索引)
WHERE 登記日期 >= '2016-01-01' AND 登記日期 < '2016-02-01'

若僅偶爾查詢、資料量不大,`YEAR()`/`MONTH()` 寫法可讀性最高;若為高頻大量查詢,請改用範圍條件並建立索引。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved