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

DB2 與 Oracle 常用函數對照表:遷移開發快速參考

     編輯:Oracle 資料庫基礎

聚合函數

OracleDB2說明
COUNT(*)COUNT(*)行數
COUNT(expr)COUNT(expr)非空值個數
SUM(expr)SUM(expr)求和
AVG(expr)AVG(expr)平均值
MAX(expr)MAX(expr)最大值
MIN(expr)MIN(expr)最小值
STDDEV(expr)STDDEV(expr)標準差
VARIANCE(expr)VARIANCE(expr)方差

字符串函數

OracleDB2說明
CONCAT(s1, s2) / s1 || s2CONCAT(s1, s2) / s1 || s2拼接
SUBSTR(s, pos, len)SUBSTR(s, pos, len)子串(位置從 1 開始)
INSTR(s, sub, pos, occ)LOCATE(sub, s, pos)查找子串位置,參數順序不同
LENGTH(s)LENGTH(s) / CHAR_LENGTH(s)字符長度
LENGTHB(s)LENGTH(s) FOR BIT DATA字節長度
UPPER(s) / LOWER(s)UPPER(s) / LOWER(s)大小寫轉換
TRIM([BOTH/LEADING/TRAILING] c FROM s)TRIM([BOTH/LEADING/TRAILING] c FROM s)去除首尾字符
LTRIM(s, c) / RTRIM(s, c)LTRIM(s, c) / RTRIM(s, c)去除左/右側字符
REPLACE(s, old, new)REPLACE(s, old, new)替換
LPAD(s, n, c) / RPAD(s, n, c)LPAD(s, n, c) / RPAD(s, n, c)左/右填充
TRANSLATE(s, from, to)TRANSLATE(s, to, from)字符轉換,參數順序相反

日期時間函數

OracleDB2說明
SYSDATECURRENT DATE / CURRENT TIMESTAMP當前日期/時間
TO_DATE(str, fmt)DATE(str) / TIMESTAMP(str) / TO_DATE(str, fmt)字符串轉日期
TO_CHAR(dt, fmt)CHAR(dt, fmt) / VARCHAR_FORMAT(dt, fmt)日期轉字符串
ADD_MONTHS(dt, n)dt + n MONTHS加減月份
MONTHS_BETWEEN(dt1, dt2)(dt1 - dt2) MONTHS月份差
LAST_DAY(dt)LAST_DAY(dt)月最後一天
NEXT_DAY(dt, day)NEXT_DAY(dt, day)下一個指定星期幾
TRUNC(dt, fmt)TRUNC(dt, fmt)截斷到指定精度
ROUND(dt, fmt)ROUND(dt, fmt)四捨五入到指定精度
EXTRACT(YEAR/MONTH/DAY FROM dt)EXTRACT(YEAR/MONTH/DAY FROM dt)提取日期部件

數學函數

OracleDB2說明
ABS(n)ABS(n)絕對值
CEIL(n) / FLOOR(n)CEILING(n) / FLOOR(n)向上/向下取整
MOD(m, n)MOD(m, n)取模
POWER(m, n)POWER(m, n)冪
SQRT(n)SQRT(n)平方根
ROUND(n, m) / TRUNC(n, m)ROUND(n, m) / TRUNCATE(n, m)四捨五入/截斷到小數位
SIGN(n)SIGN(n)符號:1/0/-1

轉換與條件函數

OracleDB2說明
NVL(expr1, expr2)COALESCE(expr1, expr2) / IFNULL(expr1, expr2)首個非空值(DB2 推薦 COALESCE,標準 SQL)
NVL2(expr1, expr2, expr3)CASE WHEN expr1 IS NOT NULL THEN expr2 ELSE expr3 END三元條件
DECODE(expr, v1, r1, v2, r2, ..., def)CASE expr WHEN v1 THEN r1 WHEN v2 THEN r2 ELSE def END多值匹配(DECODE 為 Oracle 專有)
CASE WHEN ... THEN ... ELSE ... ENDCASE WHEN ... THEN ... ELSE ... END標準 CASE 表達式
TO_NUMBER(str, fmt)DECIMAL(str) / CAST(str AS DECIMAL)字符串轉數字
TO_CHAR(num, fmt)CHAR(num) / VARCHAR_FORMAT(num, fmt)數字轉字符串

遷移關鍵差異提示

  1. INSTR 參數順序相反:Oracle INSTR(str, substr) vs DB2 LOCATE(substr, str)。
  2. TRANSLATE 參數順序相反:Oracle TRANSLATE(s, from, to) vs DB2 TRANSLATE(s, to, from)。
  3. NVL → COALESCE(ANSI 標準,支援多參數)。
  4. DECODE → CASE(標準 SQL,可移植)。
  5. SYSDATE → CURRENT TIMESTAMP(帶時區)。
  6. DUAL 表:DB2 使用 SYSIBM.SYSDUMMY1 或直接 VALUES ...。
  7. 日期運算:Oracle date + n(天),DB2 date + n DAYS。

工具輔助遷移

  • SQLines、DB2 Migration Toolkit (MTK)、Oracle SQL Developer Migration Workbench 可自動轉換大部分函數。
  • 複雜 PL/SQL 包/觸發器需人工重寫,重點關注游標、異常處理、動態 SQL、包狀態管理差異。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved