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

DB2 條件查詢中 TO_DATE 函數正確用法

     編輯:程式設計綜合問答

問題現象

DB2 查詢中使用 TO_DATE 進行日期比較報錯:

SELECT a FROM t 
WHERE b = '0' 
  AND TO_DATE(c, 'yyyy-mm-dd HH24:MI:SS') >= TO_DATE('2016-01-05 00:00:00', 'yyyy-mm-dd HH24:MI:SS')
  AND d = '9' 
ORDER BY e DESC

嘗試加 VALUES 關鍵字仍報錯:

... AND VALUES TO_DATE(c, ...) >= VALUES TO_DATE('2016-01-05 ...', ...) ...

正確語法

DB2 中 TO_DATE 用於標量表達式時,需用括號包裹並放在 VALUES 子句中,或直接在 WHERE 條件中使用帶括號的標量表達式:

SELECT a FROM t 
WHERE b = '0' 
  AND (VALUES TO_DATE(c, 'yyyy-mm-dd HH24:MI:SS')) >= (VALUES TO_DATE('2016-01-05 00:00:00', 'yyyy-mm-dd HH24:MI:SS'))
  AND d = '9' 
ORDER BY e DESC

關鍵點解析

錯誤寫法正確寫法說明
TO_DATE(...)(VALUES TO_DATE(...))DB2 要求標量函數調用在 VALUES 子句中
VALUES TO_DATE(...) >= VALUES TO_DATE(...)(VALUES TO_DATE(...)) >= (VALUES TO_DATE(...))每個標量表達式獨立括號包裹

替代方案:使用 TIMESTAMP 函數

DB2 更推薦使用 TIMESTAMP 函數進行字符串到時間戳的轉換,語法更標準:

SELECT a FROM t 
WHERE b = '0' 
  AND TIMESTAMP(c) >= TIMESTAMP('2016-01-05 00:00:00')
  AND d = '9' 
ORDER BY e DESC
  • TIMESTAMP 自動解析標準格式 YYYY-MM-DD HH:MI:SS
  • 無需指定格式字符串,代碼更簡潔
  • 性能略優於 TO_DATE

總結

DB2 中調用 TO_DATE 等標量函數時,必須遵循 (VALUES 函數調用()) 的語法規則。推薦改用 TIMESTAMP 獲得更好的兼容性與可讀性。

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