DB2 核心內建函數四大類 + Oracle 語法對照速查卡
DB2 函數命名多遵循 SQL 標準,與 Oracle 有異有同。按功能分類整理,附雙邊對照表,適合遷移開發隨身攜帶。
1. 類型轉換函數
DECIMAL DOUBLE INTEGER SMALLINT REAL
HEX(arg) DATE TIME TIMESTAMP CHAR VARCHAR
| 功能 | Oracle | DB2 |
| 數值 → 字串 | TO_CHAR(15.5) | CHAR(15.5) |
| 字串 → 日期 | TO_DATE('2008-01-01','YYYY-MM-DD') | DATE('2008-01-01') |
2. 日期時間函數
YEAR QUARTER MONTH WEEK DAY HOUR MINUTE SECOND
DAYOFYEAR DAYOFWEEK DAYS MIDNIGHT_SECONDS
MONTHNAME DAYNAME
| 功能 | Oracle | DB2 |
| 當前日期時間 | SYSDATE | CURRENT DATE / CURRENT TIMESTAMP |
| 日期 + N 天 | SYSDATE + INTERVAL '1' DAY | CURRENT DATE + 1 DAY |
3. 字串函數
LENGTH LCASE/UCASE LTRIM RTRIM
COALESCE CONCAT INSERT LEFT LOCATE POSSTR
REPEAT REPLACE RIGHT SPACE SUBSTR
| 功能 | Oracle | DB2 |
| 空值轉預設 | NVL(NULL,'aaa') | COALESCE(comm, 1000) |
| 去空格 | TRIM(' abc ') | LTRIM(RTRIM(' abc ')) |
| 去左空格 | TRIM(LEADING FROM ' abc ') | LTRIM(' abc ') |
| 去右空格 | TRIM(TRAILING FROM ' abc ') | RTRIM(' abc ') |
| 大寫 | UPPER('abc') | UPPER('abc') / UCASE('abc') |
| 字串連接 | 'abcd' || 'efg' / CONCAT | 'abcd' || 'efg' / CONCAT |
4. 數學函數
ABS COUNT MAX MIN SUM
CEIL FLOOR MOD RAND POWER
ROUND SIGN TRUNCATE
| 函數 | 說明 | 範例 |
| CEIL(arg) | ≥ arg 最小整數 | CEIL(3.2) → 4 |
| FLOOR(arg) | ≤ arg 最大整數 | FLOOR(3.8) → 3 |
| MOD(arg1,arg2) | arg1 % arg2, 符號同 arg1 | MOD(-5,3) → -2 |
| RAND() | 0-1 隨機數 | RAND() → 0.738 |
| POWER(arg1,arg2) | arg1^arg2 | POWER(2,10) → 1024 |
| ROUND(arg1,arg2) | 四捨五入 arg2 位 | ROUND(3.14159,2) → 3.14 |
| TRUNCATE(arg1,arg2) | 截斷 arg2 位 | TRUNCATE(3.14159,2) → 3.14 |
高頻遷移差異提醒
- **TRIM**:Oracle 單函數支援 LEADING/TRAILING/BOTH;DB2 需拆分 LTRIM/RTRIM
- **日期格式化**:Oracle `TO_DATE` 格式模板極靈活;DB2 `DATE`/`TIMESTAMP` 支援格式較固定,複雜格式需預處理
- **空值處理**:Oracle `NVL`/`NVL2`/`COALESCE`;DB2 主用 `COALESCE` (標準 SQL)
- **取前 N 列**:Oracle `ROWNUM`/`FETCH FIRST` (12c+);DB2 `FETCH FIRST N ROWS ONLY` (標準語法)
函數遷移核心在於**「語義對齊 > 語法對齊」**——理解標準 SQL 定義,再看各廠商實作差異,遷移才不會走彎路。