跨資料庫平台開發時,數學函數命名差異是常見阻礙。本表整理 Oracle 與 SQL Server (T-SQL) 核心數學函數的對應關係:
| 功能 | SQL Server (T-SQL) | Oracle | 備註 |
|---|---|---|---|
| 絕對值 | ABS(n) | ABS(n) | 語法相同 |
| 向上取整 | CEILING(n) | CEIL(n) | Oracle 簡寫為 CEIL |
| 向下取整 | FLOOR(n) | FLOOR(n) | 語法相同 |
| 截取整數 | CAST(n AS INT) / CONVERT(INT, n) | TRUNC(n) | Oracle TRUNC 可指定小數位 |
| 四捨五入 | ROUND(n, precision) | ROUND(n, precision) | 語法相同,精度含義一致 |
| e 為底指數 | EXP(n) | EXP(n) | 語法相同 |
| 自然對數 | LOG(n) | LN(n) | 命名差異最大處 |
| 10 為底對數 | LOG10(n) | LOG(10, n) | Oracle LOG(base, n) |
| 平方 | SQUARE(n) | POWER(n, 2) | Oracle 通用 POWER |
| 平方根 | SQRT(n) | SQRT(n) | 語法相同 |
| 任意次冪 | POWER(n, p) | POWER(n, p) | 語法相同 |
| 隨機數 | RAND([seed]) | DBMS_RANDOM.VALUE(0,1) | Oracle 需呼叫套件函數 |
| 正負號 | SIGN(n) | SIGN(n) | 語法相同 |
| 圓周率 | PI() | 無內建,用 ACOS(-1) | Oracle 計算取得 |
| 角度轉弧度 | RADIANS(n) | n * PI() / 180 | Oracle 自行計算 |
| 弧度轉角度 | DEGREES(n) | n * 180 / PI() | Oracle 自行計算 |
-- SQL Server
SELECT LOG(10) -- 自然對數 ln(10) ≈ 2.302
SELECT LOG10(100) -- 10為底對數 = 2
SELECT LOG(2, 8) -- 2為底對數 = 3 (SQL Server 2012+)
-- Oracle
SELECT LN(10) -- 自然對數 ln(10) ≈ 2.302
SELECT LOG(10, 100) -- 10為底對數 = 2 (參數順序:base, value)
SELECT LOG(2, 8) -- 2為底對數 = 3
記憶口訣:Oracle LN = 自然對數,LOG(底數, 值) = 指定底數對數。SQL Server LOG = 自然對數,LOG10 = 常用對數。
-- SQL Server
SELECT CAST(3.14159 AS INT) -- 3
SELECT CAST(-3.14159 AS INT) -- -3 (向零截斷)
-- Oracle
SELECT TRUNC(3.14159) -- 3
SELECT TRUNC(-3.14159) -- -3 (向零截斷)
SELECT TRUNC(3.14159, 2) -- 3.14 (保留 2 位小數) ★ Oracle 強大處
SELECT TRUNC(1234.56, -2) -- 1200 (截斷到百位) ★
-- SQL Server:內建函數,可設種子
SELECT RAND() -- 0-1 隨機數
SELECT RAND(12345) -- 固定種子,可重現序列
-- Oracle:DBMS_RANDOM 套件
SELECT DBMS_RANDOM.VALUE FROM dual; -- 0-1
SELECT DBMS_RANDOM.VALUE(10, 100) FROM dual; -- 10-100
-- 設定種子需呼叫程序
EXEC DBMS_RANDOM.SEED(12345);
| 函數 | SQL Server | Oracle |
|---|---|---|
| SIN / COS / TAN | ✓ | ✓ |
| ASIN / ACOS / ATAN | ✓ | ✓ |
| SINH / COSH / TANH | ✓ | ✓ |
| COT / ACOT | ✗ | ✓ |