首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 精確查詢單日資料技巧:避開邊界條件陷阱

     編輯:Oracle 資料庫相關知識

資料庫查詢「某一天資料」看似簡單,實則暗藏邊界條件陷阱。Oracle 定義一天範圍為「當日 00:00:00 含今日,翌晨 00:00:00 不含」。本文提供標準 SQL 寫法與 Java 日期運算對應方案。

核心原則

查詢 2014-10-01 資料 => bizdate >= '2014-10-01 00:00:00' AND bizdate < '2014-10-02 00:00:00'

關鍵:下界包含(>=),上界不包含(<)

Oracle 標準 SQL

SELECT TO_CHAR(bizdate, 'yyyy-MM-dd HH24:mi:ss'), id
FROM table_person
WHERE bizdate >= TO_DATE('2014-10-01 00:00:00', 'yyyy-MM-dd HH24:mi:ss')
  AND bizdate <  TO_DATE('2014-10-02 00:00:00', 'yyyy-MM-dd HH24:mi:ss');

Java 日期運算對應

Calendar cal = Calendar.getInstance();
cal.setTime(model.getRepdate());
cal.add(Calendar.DATE, 1); // 往後推一天,作為上界

常見錯誤寫法

最佳實踐建議

  1. 應用層組裝 startOfDay、startOfNextDay 兩個參數傳給 SQL
  2. SQL 使用 >= ? AND < ? 參數化查詢,利用索引範圍掃描
  3. 分區表按天分區時,可直接指定分區鍵值
  4. 報表查詢考慮物化視圖預聚合

掌握「左閉右開」區間原則,單日查詢不再踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤寫法問題
bizdate = '2014-10-01'時間元件非零時無法匹配
bizdate BETWEEN '2014-10-01' AND '2014-10-01 23:59:59'毫秒級資料遺漏,且 BETWEEN 包含上界
TRUNC(bizdate) = DATE '2014-10-01'導致全表掃描,無法使用索引