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

SQL Server 與 Oracle 常用函數對照表:跨平台開發速查手冊

     編輯:Oracle 資料庫基礎

使用指南

本表針對雙平台開發/遷移場景,採用「SQL Server 語法 | Oracle 語法」雙欄對照格式。Oracle 查詢需加 FROM DUAL,SQL Server 可直接 SELECT。函數名稱區分大小寫時以標準大寫呈現。

一、數學函數

功能SQL ServerOracle備註
絕對值ABS(-1)ABS(-1)語法相同
向上取整CEILING(-1.001)CEIL(-1.001)Oracle 簡寫 CEIL
向下取整FLOOR(-1.001)FLOOR(-1.001)語法相同
截取整數CAST(-1.002 AS INT)TRUNC(-1.002)Oracle TRUNC 更通用
四捨五入ROUND(1.23456,4)ROUND(1.23456,4)語法相同,Oracle 不保留尾隨 0
e 的冪次EXP(1)EXP(1)語法相同
自然對數LOG(2.718...)LN(2.718...)Oracle 用 LN
以 10 為底對數LOG10(10)LOG(10,10)Oracle LOG(base, value)
平方SQUARE(4)POWER(4,2)Oracle 通用 POWER
平方根SQRT(4)SQRT(4)語法相同
任意冪次POWER(3,4)POWER(3,4)語法相同
隨機數RAND()DBMS_RANDOM.VALUE(0,1)Oracle 需呼叫套件
符號函數SIGN(-8)SIGN(-8)語法相同
圓周率PI()無內建Oracle 自行定義 3.141592653589793
三角函數SIN/COS/TAN (弧度)SIN/COS/TAN (弧度)參數單位相同
反三角函數ASIN/ACOS/ATAN/ATN2ASIN/ACOS/ATAN/ATAN2回傳弧度
角度↔弧度DEGREES/RADIANS無內建Oracle 自行計算

二、數值比較與處理

功能SQL ServerOracle備註
集合最大值MAX() 子查詢GREATEST(1,-2,4,3)Oracle 多參數直接比較
集合最小值MIN() 子查詢LEAST(1,-2,4,3)同上
NULL 替換ISNULL(col, 10)NVL(col, 10)Oracle 也支援 COALESCE

三、字串函數

功能SQL ServerOracle備註
字元 ASCII 碼ASCII('a')ASCII('a')語法相同
ASCII 碼轉字元CHAR(97)CHR(97)Oracle 用 CHR
字串連接'11'+'22'+'33''11'||'22'||'33' 或 CONCATOracle 推薦用 ||
子串位置CHARINDEX('s','sdsq',2)INSTR('sdsq','s',2)參數順序不同
模糊模式位置PATINDEX('%d%q%','str')無直接對應Oracle 用 REGEXP_INSTR
子串擷取SUBSTRING('abcd',2,2)SUBSTR('abcd',2,2)語法相似
子串替換(指定位置)STUFF('abcdef',2,3,'ijk')REPLACE('abcdef','bcd','ijk')邏輯不同,STUFF 指定長度
字元逐個替換無直接對應TRANSLATE('str','fa','我')Oracle 特有強項
長度LEN / DATALENGTHLENGTH / LENGTHBOracle 分字元/位元組
大小寫轉換LOWER/UPPERLOWER/UPPER語法相同
單字首字母大寫無內建INITCAP('abcd dsaf')Oracle 實用功能
左補字元SPACE(10)+'abcd'LPAD('abcd',14)Oracle LPAD/RPAD 更強
右補字元'abcd'+SPACE(10)RPAD('abcd',14)同上
去除空白LTRIM/RTRIMLTRIM/RTRIM/TRIMOracle TRIM 可指定字元
重複字串REPLICATE('abcd',2)無直接對應Oracle 用 RPAD/LPAD 技巧
發音相似比較SOUNDEX/DIFFERENCESOUNDEXOracle 無 DIFFERENCE

四、日期時間函數

功能SQL ServerOracle備註
目前日期時間GETDATE()SYSDATEOracle 精度至秒
日期加減天數DATEADD/直接 +/-直接 +/- 數字Oracle 直接運算最簡潔
日期格式化CONVERT(CHAR(10),GETDATE(),20)TO_CHAR(SYSDATE,'YYYY-MM-DD')Oracle 格式模板豐富
時間格式化CONVERT(CHAR(8),GETDATE(),108)TO_CHAR(SYSDATE,'HH24:MI:SS')注意 MI vs MM
日期部分擷取DATEPART/DATENAMETO_CHAR(..., '格式')Oracle 統一用 TO_CHAR
當月最後一天無直接函數LAST_DAY(SYSDATE)Oracle 實用內建
本週指定星期無直接函數NEXT_DAY(SYSDATE, 7)7=星期日,1=星期一
字串轉日期CAST('2024-01-01' AS DATETIME)TO_DATE('2024-01-01','YYYY-MM-DD')Oracle 格式化更嚴格
日期差值(秒)DATEDIFF(SS, d1, d2)(d1-d2)*24*60*60Oracle 日期相減得天數
日期加減分鐘DATEADD(MI, 8, GETDATE())SYSDATE + 8/24/60Oracle 單位為天
時區轉換無直接函數NEW_TIME(SYSDATE,'YDT','GMT')Oracle 內建時區轉換

遷移關鍵差異提醒

  1. ISNULL 只接受兩個參數,COALESCE 多參數通用,遷移建議統一用 COALESCE
  2. 字串連接:+ 在 SQL Server 同時是加法與連接,Oracle || 僅連接,避免隱含轉換錯誤
  3. 日期運算:SQL Server 單位靈活,Oracle 基準為「天」,精確運算需換算
  4. TRANSLATE、INITCAP、LAST_DAY、NEXT_DAY、NEW_TIME 為 Oracle 獨有實用功能,遷移至 SQL Server 需自寫函數
  5. PATINDEX、DIFFERENCE、DEGREES/RADIANS 為 SQL Server 獨有,遷移至 Oracle 需用正則或自寫

結語

跨平台函數對照非單純語法映射,更需理解底層語義差異(如日期基準單位、NULL 語義、字元集處理)。實際遷移建議建立「函數映射資產庫」,搭配自動化測試驗證語義等價,而非僅依賴語法轉換工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved