| Oracle | DB2 | 說明 |
|---|---|---|
| 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) | 方差 |
| Oracle | DB2 | 說明 |
|---|---|---|
| CONCAT(s1, s2) / s1 || s2 | CONCAT(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) | 字符轉換,參數順序相反 |
| Oracle | DB2 | 說明 |
|---|---|---|
| SYSDATE | CURRENT 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) | 提取日期部件 |
| Oracle | DB2 | 說明 |
|---|---|---|
| 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 |
| Oracle | DB2 | 說明 |
|---|---|---|
| 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 ... END | CASE 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) | 數字轉字符串 |
INSTR 參數順序相反:Oracle INSTR(str, substr) vs DB2 LOCATE(substr, str)。TRANSLATE 參數順序相反:Oracle TRANSLATE(s, from, to) vs DB2 TRANSLATE(s, to, from)。NVL → COALESCE(ANSI 標準,支援多參數)。DECODE → CASE(標準 SQL,可移植)。SYSDATE → CURRENT TIMESTAMP(帶時區)。DUAL 表:DB2 使用 SYSIBM.SYSDUMMY1 或直接 VALUES ...。date + n(天),DB2 date + n DAYS。