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(...)) | 每個標量表達式獨立括號包裹 |
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:SSTO_DATEDB2 中調用 TO_DATE 等標量函數時,必須遵循 (VALUES 函數調用()) 的語法規則。推薦改用 TIMESTAMP 獲得更好的兼容性與可讀性。