Oracle 與 Microsoft SQL Server (T-SQL) 在函數命名、語法與功能上存在諸多差異。本文整理常用數學、字串、日期、比較等函數對照,助您快速移植或雙平台開發。
| 功能 | SQL Server | Oracle |
| ASCII 碼 | ASCII('a') | ASCII('a') |
| 碼轉字元 | CHAR(97) | CHR(97) |
| 字串串聯 | '11'+'22'+'33' | CONCAT('11','22') || '33' |
| 子字串位置 | CHARINDEX('s','sdsq',2) | INSTR('sdsq','s',2) |
| 模糊搜尋位置 | PATINDEX('%d%q%','sdsfasdqe') | 無直接對應,可用 INSTR 多次搜尋 |
| 擷取子字串 | SUBSTRING('abcd',2,2) | SUBSTR('abcd',2,2) |
| 指定位置替換 | STUFF('abcdef',2,3,'ijklmn') | REPLACE('abcdef','bcd','ijklmn') |
| 全部字元替換 | 無 | TRANSLATE('fasdbfasegas','fa','我') |
| 長度 | LEN / DATALENGTH | LENGTH / LENGTHB |
| 大小寫轉換 | LOWER / UPPER | LOWER / UPPER |
| 首字母大寫 | 無 | INITCAP('abcd dsaf') |
| 左補空格 | SPACE(10)+'abcd' | LPAD('abcd',14) |
| 右補空格 | 'abcd'+SPACE(10) | RPAD('abcd',14) |
| 移除空格 | LTRIM / RTRIM | LTRIM / RTRIM / TRIM |
| 重複字串 | REPLICATE('abcd',2) | 無直接對應 |
| 發音比對 | SOUNDEX / DIFFERENCE | SOUNDEX |
| 功能 | SQL Server | Oracle |
| 目前時間 | GETDATE() | SYSDATE |
| 日期加減天 | 日期 + 整數 | 日期 + 整數 |
| 取日期部份 | CONVERT(CHAR(10),GETDATE(),20) | TRUNC(SYSDATE) 或 TO_CHAR(SYSDATE,'YYYY-MM-DD') |
| 取時間部份 | CONVERT(CHAR(8),GETDATE(),108) | TO_CHAR(SYSDATE,'HH24:MI:SS') |
| 日期部份擷取 | DATEPART / DATENAME | TO_CHAR(日期, '格式') |
| 月份最後一天 | 無直接函數 | LAST_DAY(SYSDATE) |
| 本週指定週日 | 無直接函數 | NEXT_DAY(SYSDATE, 7) |
| 字串轉日期 | CAST('2004-09-08' AS DATETIME) | TO_DATE('2004-01-05','YYYY-MM-DD') |
| 日期差值(秒) | DATEDIFF(SS, d1, d2) | (d1-d2)*24*60*60 |
| 日期加減(分鐘) | DATEADD(MI, 8, GETDATE()) | SYSDATE + 8/60/24 |
| 時區轉換 | 無內建 | NEW_TIME(SYSDATE, 'YDT', 'GMT') |
跨平台遷移時,除函數名稱對應外,尚需注意:日期格式模板差異、隱含型別轉換行為、NULL 排序差異、大小寫敏感度設定等。建議建立函數包裝層或使用 ANSI SQL 標準語法提高可移植性。