首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 與 Oracle SQL 寫法十大差異對照表(含相容寫法)

     編輯:DB2 教學

遷移痛點背景

Oracle 專有語法導致程式碼綁定廠商,遷移 DB2 時頻發相容性錯誤。本文整理十大高頻差異與 ANSI/DB2 相容寫法。

對照總表

類別OracleDB2相容/建議寫法
整數轉字串TO_CHAR(1)CHAR(1)CAST(1 AS CHAR)
字串轉整數TO_NUMBER('1')INT('1')CAST('1' AS INT)
字串轉浮點TO_NUMBER('1.1')DOUBLE('1.1')—
浮點轉字串TO_CHAR(1.1)CHAR(1.1)—
字串轉日期TO_DATE('2007-04-26','yyyy-mm-dd')DATE('2007-04-26')—
字串轉時間戳TO_DATE('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')TO_DATE('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')相容
日期轉字串TO_CHAR(TO_DATE(...),'yyyy-mm-dd')CHAR(DATE('2007-04-29'))—

其他關鍵差異

  1. 弱型別比較:Oracle 允許 WHERE '1' IN (1)、WHERE '1'=1;DB2 嚴格型別檢查,需顯式轉型。
  2. CREATE OR REPLACE:Oracle 支援,DB2 不支援,需先 DROP 再 CREATE。
  3. 子查詢別名:DB2 強制要求別名(AS t 或 t),Oracle 可省略。
  4. DATE 型別:Oracle DATE 含時分秒;DB2 DATE 僅年月日,需用 TIMESTAMP 存完整時間。Hibernate 映射 java.util.Date 對應 DB2 TIMESTAMP。
  5. 分頁:Oracle 用 ROWNUM;DB2 用 ROWNUMBER() OVER()。
  6. DECODE:DB2 不支援,改用 CASE WHEN。
  7. NVL:DB2 不支援,改用 COALESCE。
  8. SUBSTR 邊界檢查:DB2 對字串常數長度嚴格檢查第三參數,Oracle 較寬鬆。建議省略第三參數取至尾。
  9. 目前日期:Oracle SYSDATE;DB2 CURRENT DATE。

遷移建議

  • 優先使用 ANSI SQL(CAST、CASE、COALESCE)。
  • Hibernate 方言正確設定為 DB2Dialect。
  • 測試階段啟用嚴格型別檢查,提前暴露問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved