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

Oracle 與 SQL Server 數學函數對照表:跨平台開發必備參考

     編輯:Oracle 資料庫基礎

核心數學函數對照總表

跨資料庫平台開發時,數學函數命名差異是常見阻礙。本表整理 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() / 180Oracle 自行計算
弧度轉角度DEGREES(n)n * 180 / PI()Oracle 自行計算

關鍵差異深度解析

1. 對數函數:最大陷阱

-- 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 = 常用對數。

2. 截取整數:TRUNC vs CAST

-- 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 (截斷到百位) ★

3. 隨機數生成:函數 vs 套件

-- 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);

4. 三角函數:Oracle 更完整

實戰遷移建議

建立對照視圖/函數包裝

-- Oracle 建立相容函數
CREATE OR REPLACE FUNCTION LOG10(n NUMBER) RETURN NUMBER AS
BEGIN
  RETURN LOG(10, n);
END;
/

CREATE OR REPLACE FUNCTION SQUARE(n NUMBER) RETURN NUMBER AS
BEGIN
  RETURN POWER(n, 2);
END;
/

CREATE OR REPLACE FUNCTION RAND RETURN NUMBER AS
BEGIN
  RETURN DBMS_RANDOM.VALUE;
END;
/

動態 SQL 產生器模式

跨平台報表工具可建立函數映射表:

CREATE TABLE math_func_map (
  func_name VARCHAR2(30),
  oracle_expr VARCHAR2(100),
  sqlserver_expr VARCHAR2(100)
);

INSERT INTO math_func_map VALUES ('LOG10', 'LOG(10, :n)', 'LOG10(:n)');
INSERT INTO math_func_map VALUES ('SQUARE', 'POWER(:n, 2)', 'SQUARE(:n)');
-- ...

版本演進補充

  • SQL Server 2012+:新增 LOG(base, value)、EOMONTH、IIF、CHOOSE 等,縮減與 Oracle 差距
  • Oracle 12c+:新增 APPROX_COUNT_DISTINCT、JSON 函數等分析功能
  • Oracle 21c:支援 PI() 內建常數

總結

雖然 ANSI SQL 定義了核心數學函數,但各資料庫廠商在命名、參數順序、擴充功能上仍有顯著差異。建立專案級的函數對照表、封裝相容性函數、使用參數化查詢而非硬編碼函數名,是跨平台資料庫應用開發的關鍵成功因素。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數SQL ServerOracle
SIN / COS / TAN✓✓
ASIN / ACOS / ATAN✓✓
SINH / COSH / TANH✓✓
COT / ACOT✗✓