本文整理 Oracle 與 SQL Server 在數學、字串、日期、彙總等類別的常用函數對應關係,供跨平台開發、移植專案快速查閱。僅列舉高頻函數,非完整功能清單,實務以解決問題為優先。
| 功能 | SQL Server | Oracle |
|---|---|---|
| 絕對值 | ABS(-1) | ABS(-1) |
| 向上取整 | CEILING(-1.001) | CEIL(-1.001) |
| 向下取整 | FLOOR(-1.001) | FLOOR(-1.001) |
| 截取整數 | CAST(-1.002 AS INT) | TRUNC(-1.002) |
| 四捨五入 | ROUND(1.23456,4) → 1.23460 | ROUND(1.23456,4) → 1.2346 |
| e 次方 | EXP(1) | EXP(1) |
| 自然對數 | LOG(2.718...) | LN(2.718...) |
| 以 10 為底對數 | LOG10(10) | LOG(10,10) |
| 平方 | SQUARE(4) | POWER(4,2) |
| 平方根 | SQRT(4) | SQRT(4) |
| 任意次方 | POWER(3,4) | POWER(3,4) |
| 隨機數 | RAND() | DBMS_RANDOM.VALUE(0,1) |
| 正負號 | SIGN(-8) | SIGN(-8) |
| 圓周率 | PI() | 無內建,ACOS(-1) 或自定 |
| 三角函數 | SIN/COS/TAN (弧度) | SIN/COS/TAN (弧度) |
| 反三角函數 | ASIN/ACOS/ATAN/ATAN2 | ASIN/ACOS/ATAN/ATAN2 |
| 弧度↔角度 | DEGREES/RADIANS | 無內建,自行換算 |
| 功能 | SQL Server | Oracle |
|---|---|---|
| 集合最大值 | MAX(val) FROM (VALUES ...) | GREATEST(1,-2,4,3) |
| 集合最小值 | MIN(val) FROM (VALUES ...) | LEAST(1,-2,4,3) |
| NULL 替換 | ISNULL(col, 10) | NVL(col, 10) |
| 功能 | SQL Server | Oracle |
|---|---|---|
| ASCII 碼 | ASCII('a') | ASCII('a') |
| 碼轉字元 | CHAR(97) | CHR(97) |
| 串接 | '11'+'22'+'33' | '11'||'22'||'33' 或 CONCAT('11','22')||'33' |
| 子串位置 | CHARINDEX('s','sdsq',2) | INSTR('sdsq','s',2) |
| 模糊模式位置 | PATINDEX('%d%q%','sdsfasdqe') | 無直接對應,INSTR 配合第 4 參數控制出現次數 |
| 取子串 | SUBSTRING('abcd',2,2) | SUBSTR('abcd',2,2) |
| 指定長度替換 | STUFF('abcdef',2,3,'ijklmn') | REPLACE('abcdef','bcd','ijklmn') |
| 字元級轉換 | 無 | TRANSLATE('fasdbfasegas','fa','我') |
| 長度 | LEN / DATALENGTH | LENGTH |
| 大小寫 | 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) | 無內建,RPAD 技巧或 PL/SQL |
| 發音相似比較 | SOUNDEX, DIFFERENCE | SOUNDEX |
| 功能 | SQL Server | Oracle |
|---|---|---|
| 目前日期時間 | GETDATE() | SYSDATE (精度至秒), SYSTIMESTAMP (精度至毫秒+時區) |
| 日期加減天 | GETDATE() + 1 | SYSDATE + 1 |
| 取日期部份 | 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) (7=週六) |
| 字串轉日期 | CAST('2024-01-01' AS DATETIME) | TO_DATE('2024-01-01','YYYY-MM-DD') |
| 兩日期差值 (秒) | DATEDIFF(SS, d1, d2) | (d1-d2)*24*60*60 (日期相減得天數) |
| 日期加減間隔 | DATEADD(MI, 8, GETDATE()) | SYSDATE + 8/24/60 (以天為單位) |
| 時區轉換 | 無直函數 (需 AT TIME ZONE) | NEW_TIME(SYSDATE,'YDT','GMT') |
| 元件 | SQL Server (DATEPART) | Oracle (TO_CHAR) |
|---|---|---|
| 年 | YY, YYYY | YYYY, YY, RRRR, RR |
| 季 | QQ, Q | Q |
| 月 | MM, M | MM, MON, MONTH, RM |
| 日 | DD, D | DD, DDD |
| 週 | WK, WW | WW, IW (ISO 週) |
| 星期 | DW | D, DY, DAY |
| 時 | HH, HH12, HH24 | HH, HH12, HH24 |
| 分 | MI, N | MI |
| 秒 | SS, S | SS |
| 毫秒 | MS | FF, FF3... |
GMT 格林威治標準時間 EST/EDT 東部標準/夏令時間 CST/CDT 中部標準/夏令時間 MST/MDT 山區標準/夏令時間 PST/PDT 太平洋標準/夏令時間 YST/YDT 猶肯標準/夏令時間 (北京東八區常用 YDT)
提醒:Oracle 12c+ 推薦使用 FROM_TZ/AT TIME ZONE 替代 NEW_TIME;SQL Server 2016+ 支援 AT TIME ZONE。跨平台移植時請以實測為準。