本表針對雙平台開發/遷移場景,採用「SQL Server 語法 | Oracle 語法」雙欄對照格式。Oracle 查詢需加 FROM DUAL,SQL Server 可直接 SELECT。函數名稱區分大小寫時以標準大寫呈現。
| 功能 | SQL Server | Oracle | 備註 |
|---|---|---|---|
| 絕對值 | 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/ATN2 | ASIN/ACOS/ATAN/ATAN2 | 回傳弧度 |
| 角度↔弧度 | DEGREES/RADIANS | 無內建 | Oracle 自行計算 |
| 功能 | SQL Server | Oracle | 備註 |
|---|---|---|---|
| 集合最大值 | MAX() 子查詢 | GREATEST(1,-2,4,3) | Oracle 多參數直接比較 |
| 集合最小值 | MIN() 子查詢 | LEAST(1,-2,4,3) | 同上 |
| NULL 替換 | ISNULL(col, 10) | NVL(col, 10) | Oracle 也支援 COALESCE |
| 功能 | SQL Server | Oracle | 備註 |
|---|---|---|---|
| 字元 ASCII 碼 | ASCII('a') | ASCII('a') | 語法相同 |
| ASCII 碼轉字元 | CHAR(97) | CHR(97) | Oracle 用 CHR |
| 字串連接 | '11'+'22'+'33' | '11'||'22'||'33' 或 CONCAT | Oracle 推薦用 || |
| 子串位置 | 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 / DATALENGTH | LENGTH / LENGTHB | Oracle 分字元/位元組 |
| 大小寫轉換 | LOWER/UPPER | LOWER/UPPER | 語法相同 |
| 單字首字母大寫 | 無內建 | INITCAP('abcd dsaf') | Oracle 實用功能 |
| 左補字元 | SPACE(10)+'abcd' | LPAD('abcd',14) | Oracle LPAD/RPAD 更強 |
| 右補字元 | 'abcd'+SPACE(10) | RPAD('abcd',14) | 同上 |
| 去除空白 | LTRIM/RTRIM | LTRIM/RTRIM/TRIM | Oracle TRIM 可指定字元 |
| 重複字串 | REPLICATE('abcd',2) | 無直接對應 | Oracle 用 RPAD/LPAD 技巧 |
| 發音相似比較 | SOUNDEX/DIFFERENCE | SOUNDEX | Oracle 無 DIFFERENCE |
| 功能 | SQL Server | Oracle | 備註 |
|---|---|---|---|
| 目前日期時間 | GETDATE() | SYSDATE | Oracle 精度至秒 |
| 日期加減天數 | 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/DATENAME | TO_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*60 | Oracle 日期相減得天數 |
| 日期加減分鐘 | DATEADD(MI, 8, GETDATE()) | SYSDATE + 8/24/60 | Oracle 單位為天 |
| 時區轉換 | 無直接函數 | NEW_TIME(SYSDATE,'YDT','GMT') | Oracle 內建時區轉換 |
ISNULL 只接受兩個參數,COALESCE 多參數通用,遷移建議統一用 COALESCE+ 在 SQL Server 同時是加法與連接,Oracle || 僅連接,避免隱含轉換錯誤TRANSLATE、INITCAP、LAST_DAY、NEXT_DAY、NEW_TIME 為 Oracle 獨有實用功能,遷移至 SQL Server 需自寫函數PATINDEX、DIFFERENCE、DEGREES/RADIANS 為 SQL Server 獨有,遷移至 Oracle 需用正則或自寫跨平台函數對照非單純語法映射,更需理解底層語義差異(如日期基準單位、NULL 語義、字元集處理)。實際遷移建議建立「函數映射資產庫」,搭配自動化測試驗證語義等價,而非僅依賴語法轉換工具。