說明
僅列出常用分析/挖掘函數對應,**非完整函數清單**。實際開發以解決問題為優先,勿盲目比較優劣。
數學函數
| 功能 | SQL Server | Oracle | 備註 |
| 絕對值 | ABS(-1) | ABS(-1) FROM DUAL | |
| 向上取整 | CEILING(-1.001) | CEIL(-1.001) FROM DUAL | Oracle 無 CEILING |
| 向下取整 | FLOOR(-1.001) | FLOOR(-1.001) FROM DUAL | |
| 截取整數 | CAST(-1.002 AS INT) | TRUNC(-1.002) FROM DUAL | TRUNC 可指定小數位 |
| 四捨五入 | ROUND(1.23456,4) | ROUND(1.23456,4) FROM DUAL | 語法相同 |
| e 的冪 | EXP(1) | EXP(1) FROM DUAL | |
| 自然對數 | LOG(2.718...) | LN(2.718...) FROM DUAL | Oracle 用 LN |
| 以 10 為底對數 | LOG10(10) | LOG(10,10) FROM DUAL | Oracle LOG(base, val) |
| 平方 | SQUARE(4) | POWER(4,2) FROM DUAL | |
| 平方根 | SQRT(4) | SQRT(4) FROM DUAL | |
| 任意冪 | POWER(3,4) | POWER(3,4) FROM DUAL | |
| 隨機數 | RAND() | DBMS_RANDOM.VALUE(0,1) FROM DUAL | Oracle 需套件 |
| 符號 | SIGN(-8) | SIGN(-8) FROM DUAL | |
字串函數(續)
| 功能 | SQL Server | Oracle |
| 字串長度 | LEN(str) | LENGTH(str) / LENGTHB(str) (bytes) |
| 子字串 | SUBSTRING(str, start, len) | SUBSTR(str, start, len) |
| 字串連接 | str1 + str2 或 CONCAT(str1,str2) | str1 || str2 或 CONCAT(str1,str2) |
| 大小寫轉換 | UPPER/LOWER | UPPER/LOWER、INITCAP (首字大寫) |
| 去除空白 | LTRIM/RTRIM | LTRIM/RTRIM/TRIM |
| 替換 | REPLACE(str, old, new) | REPLACE(str, old, new) |
| 位置搜尋 | CHARINDEX(sub, str) | INSTR(str, sub) |
| 左/右擷取 | LEFT/RIGHT(str, n) | SUBSTR(str, 1, n) / SUBSTR(str, -n) |
日期時間函數
| 功能 | SQL Server | Oracle |
| 目前日期時間 | GETDATE() | SYSDATE / SYSTIMESTAMP |
| 日期加減 | DATEADD(day, 7, GETDATE()) | SYSDATE + 7 / ADD_MONTHS(SYSDATE, 1) |
| 日期差 | DATEDIFF(day, d1, d2) | d2 - d1 (結果為天數) |
| 日期截取 | DATEPART(month, d) | EXTRACT(MONTH FROM d) / TO_CHAR(d, 'MM') |
| 字串轉日期 | CONVERT(DATETIME, '2024-01-01', 120) | TO_DATE('2024-01-01', 'YYYY-MM-DD') |
| 日期轉字串 | CONVERT(VARCHAR, d, 120) | TO_CHAR(d, 'YYYY-MM-DD HH24:MI:SS') |
轉換/條件函數
| 功能 | SQL Server | Oracle |
| 型別轉換 | CAST(expr AS type) / CONVERT(type, expr) | CAST(expr AS type) / TO_CHAR/TO_NUMBER/TO_DATE |
| 空值處理 | ISNULL(expr, val) / COALESCE(...) | NVL(expr, val) / COALESCE(...) |
| 條件判斷 | CASE WHEN ... THEN ... ELSE ... END | CASE WHEN ... THEN ... ELSE ... END / DECODE(expr, v1, r1, v2, r2, ...) |
分析/視窗函數(兩者均支援 ANSI SQL:2003)
ROW_NUMBER() OVER (PARTITION BY dept ORDER BY sal DESC)
RANK() / DENSE_RANK()
LAG(col, 1) / LEAD(col, 1)
SUM(col) OVER (PARTITION BY dept ORDER BY dt ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
語法幾乎相同,Oracle 12c+ 新增 MATCH_RECOGNIZE 模式識別,SQL Server 2022+ 新增 WINDOW 子句簡化定義。