| 功能 | SQL Server (T-SQL) | Oracle (PL/SQL) | 備註 |
|---|---|---|---|
| 絕對值 | ABS(-1) | ABS(-1) FROM dual | 語法相同,Oracle 需 FROM dual |
| 向上取整 | CEILING(-1.001) → 0 | CEIL(-1.001) → 0 | 函數名拼寫不同 |
| 向下取整 | FLOOR(-1.001) → -2 | FLOOR(-1.001) → -2 | 行為一致 |
| 截取整數 | CAST(-1.002 AS INT) → -1 | TRUNC(-1.002) → -1 | T-SQL 無 TRUNC,用 CAST/CONVERT |
| 四捨五入 | ROUND(1.23456, 4) → 1.23460 | ROUND(1.23456, 4) → 1.2346 | T-SQL 保留尾隨 0,Oracle 自動去除 |
| e 的冪次 | EXP(1) → 2.7182818284590451 | EXP(1) → 2.71828182 | 精度不同,T-SQL 更高 |
| 自然對數 | LOG(2.7182818284590451) → 1 | LN(2.7182818284590451) → 1 | Oracle 專用 LN,T-SQL 用 LOG |
| 以 10 為底對數 | LOG10(10) → 1 | LOG(10, 10) → 1 | Oracle LOG(base, value) 雙參數 |
| 平方根 | SQRT(4) → 2 | SQRT(4) → 2 | 通用 |
| 冪運算 | POWER(2, 3) → 8 | POWER(2, 3) → 8 | 通用 |
| 隨機數 | RAND() (0~1) | DBMS_RANDOM.VALUE (0~1) | Oracle 需套件呼叫 |
| 正負號 | SIGN(-5) → -1 | SIGN(-5) → -1 | 通用 |
| 圓周率 | PI() → 3.14159... | ACOS(-1) 或自定義 | Oracle 無內建 PI() |
CAST(value AS INT) 或 CONVERT(INT, value) 截取小數;注意負數行為與 FLOOR 不同(CAST(-1.9 AS INT) = -1,FLOOR(-1.9) = -2)。LOG(float_expression) 固定自然對數;Oracle LOG(base, value) 可指定底數。T-SQL 以 10 為底用 LOG10。FROM dual,T-SQL 直接 SELECT ABS(-1)。| 類別 | SQL Server | Oracle |
|---|---|---|
| 字串連接 | + 或 CONCAT() | || 或 CONCAT() |
| 子字串 | SUBSTRING(str, start, len) | SUBSTR(str, start, len) |
| 字串長度 | LEN() / DATALENGTH() | LENGTH() / LENGTHB() |
| 大小寫轉換 | UPPER()/LOWER() | UPPER()/LOWER() |
| 當前日期時間 | GETDATE() / SYSDATETIME() | SYSDATE / SYSTIMESTAMP |
| 日期加減 | DATEADD(day, 1, GETDATE()) | SYSDATE + 1 |
| 日期差異 | DATEDIFF(day, d1, d2) | d2 - d1 (數值) 或 MONTHS_BETWEEN |
| 日期截取 | CAST(GETDATE() AS DATE) | TRUNC(SYSDATE) |
掌握核心函數對照表,配合「語法轉換 → 語義驗證 → 效能基準測試」三步驟,可將 Oracle → SQL Server 遷移中的函數層風險降至最低。建議團隊維護內部遷移 Wiki,持續補充業務特有的 UDF 對應關係。