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

Oracle 與 SQL Server 系統函數對照表:遷移開發必備參考

     編輯:Oracle 資料庫基礎

字串函數對照

功能OracleSQL Server
字元編碼ASCIIASCII
編碼轉字元CHRCHAR
串接CONCAT / ||+
搜尋位置INSTRCHARINDEX / PATINDEX
大小寫LOWER / UPPERLOWER / UPPER
左填充LPADN/A (REPLICATE + RIGHT)
修剪空白LTRIM / RTRIMLTRIM / RTRIM
重複字串RPADREPLICATE
同音代碼SOUNDEXSOUNDEX
子字串SUBSTRSUBSTRING
替換REPLACESTUFF / REPLACE
首字大寫INITCAPN/A
字元轉換TRANSLATEN/A
長度LENGTHLEN / DATALENGTH
最大/最小字串GREATEST / LEASTN/A
NULL 替換NVLISNULL / COALESCE

日期函數對照

功能OracleSQL Server
日期運算date ± n / ADD_MONTHSDATEADD
日期差值date - date / MONTHS_BETWEENDATEDIFF
目前日期時間SYSDATEGETDATE()
月底日期LAST_DAYN/A (EOMONTH 2012+)
時區轉換NEW_TIMEN/A (AT TIME ZONE 2016+)
下一個週幾NEXT_DAYN/A
日期轉字串TO_CHARDATENAME / CONVERT
日期轉數值TO_NUMBER(TO_CHAR())DATEPART
日期捨入ROUNDCONVERT
日期截斷TRUNCCONVERT
字串轉日期TO_DATECONVERT / CAST
NULL 替換NVLISNULL

轉換函數核心差異

SQL Server 單一 CONVERT/CAST 涵蓋 Oracle 多個 TO_* 函數:

轉換方向OracleSQL Server
數字→字串TO_CHARCONVERT/CAST
字串→數字TO_NUMBERCONVERT/CAST
日期→字串TO_CHARCONVERT/CAST (style 代碼)
字串→日期TO_DATECONVERT/CAST (自動識別格式)
16進位→二進位HEXTORAWCONVERT
二進位→16進位RAWTOHEXCONVERT

SQL Server CONVERT 透過 style 參數控制日期格式 (如 101=mm/dd/yyyy, 120=yyyy-mm-dd hh:mi:ss)。

條件邏輯:DECODE vs CASE

-- Oracle DECODE
DECODE(grade, 'A',4, 'B',3, 'C',2, 0)

-- SQL Server CASE (支援布林運算式)
CASE grade
  WHEN 'A' THEN 4
  WHEN 'B' THEN 3
  WHEN 'C' THEN 2
  ELSE 0
END

-- CASE 進階: 搜尋條件
CASE
  WHEN sal > 5000 THEN 'High'
  WHEN sal > 3000 THEN 'Mid'
  ELSE 'Low'
END

使用者定義函數替代方案

Oracle PL/SQL 函數可直接在 SQL 呼叫;SQL Server 需改寫為 JOIN 子查詢或 APPLY:

-- Oracle: 直接呼叫函數
SELECT ssn, tuition_paid / GET_SUM_MAJOR(major) pct FROM student;

-- SQL Server: 使用衍生表/子查詢
SELECT s.ssn, s.tuition_paid / m.sum_major pct
FROM student s
JOIN (SELECT major, SUM(tuition_paid) sum_major FROM student GROUP BY major) m
  ON s.major = m.major;

流程控制與變數差異

項目Oracle PL/SQLSQL Server T-SQL
變數宣告DECLARE v_name TYPE;DECLARE @v_name TYPE;
賦值v := 1;SET @v = 1;
SELECT INTOSELECT col INTO v FROM t;SELECT @v = col FROM t;
IF/ELSEIF ... THEN ... ELSIF ... END IF;IF ... BEGIN ... END ELSE BEGIN ... END
迴圈LOOP/WHILE/FORWHILE ... BEGIN ... END
游標支援 %TYPE, %ROWTYPE, FOR LOOPDECLARE CURSOR, FETCH, @@FETCH_STATUS
輸出訊息DBMS_OUTPUT.PUT_LINEPRINT
拋出錯誤RAISE_APPLICATION_ERRORRAISERROR
註解-- / /* */-- / /* */

游標關鍵差異

  • Oracle:預設需游標,支援隱性/顯性、%ROWTYPE、FOR LOOP 自動管理
  • SQL Server:預設結果集直回客戶端,僅需逐列處理時宣告游標
  • T-SQL 游標支援 SCROLL (前後捲動)、INSENSITIVE (快照隔離)、DEALLOCATE 釋放資源

其他重要差異

  • 字串串接:Oracle || vs SQL Server +
  • NULL 比較:SQL Server 預設 ANSI_NULLS ON,NULL = NULL 為 UNKNOWN
  • 模式比對:SQL Server 額外支援 [range]、[^range] 萬用字元
  • 序列/身分識別欄:Oracle SEQUENCE vs SQL Server IDENTITY
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved