SQL Server 与 Oracle 常用函数对照表
一、字符串处理函数
SQL Server 函数 | SQL Server 实例 | Oracle 函数 | Oracle 实例 | 输出结果 |
---|---|---|---|---|
CONCAT | SELECT CONCAT('A', 'B', 'C'); | CONCAT | SELECT CONCAT('A', 'B') FROM DUAL; | ABC (SQL)AB (Oracle) |
SUBSTRING | SELECT SUBSTRING('Hello', 2, 3); | SUBSTR | SELECT SUBSTR('Hello', 2, 3) FROM DUAL; | ell |
CHARINDEX | SELECT CHARINDEX('@', 'user@test.com'); | INSTR | SELECT INSTR('user@test.com', '@') FROM DUAL; | 5 |
REPLACE | SELECT REPLACE('2023-01', '-', '/'); | REPLACE | SELECT REPLACE('2023-01', '-', '/') FROM DUAL; | 2023/01 |
LEN | SELECT LEN('SQL Server'); | LENGTH | SELECT LENGTH('Oracle') FROM DUAL; | 10 (SQL)6 (Oracle) |
二、数值计算函数
SQL Server 函数 | SQL Server 实例 | Oracle 函数 | Oracle 实例 | 输出结果 |
---|---|---|---|---|
ROUND | SELECT ROUND(123.4567, 2); | ROUND | SELECT ROUND(123.4567, 2) FROM DUAL; | 123.4600 (SQL)123.46 (Oracle) |
CEILING | SELECT CEILING(3.2); | CEIL | SELECT CEIL(3.2) FROM DUAL; | 4 |
FLOOR | SELECT FLOOR(3.8); | FLOOR | SELECT FLOOR(3.8) FROM DUAL; | 3 |
ABS | SELECT ABS(-15.5); | ABS | SELECT ABS(-15.5) FROM DUAL; | 15.5 |
RAND | SELECT RAND(); | DBMS_RANDOM.VALUE | SELECT DBMS_RANDOM.VALUE(0,1) FROM DUAL; | 0.7634 (示例) |
三、日期与时间函数
SQL Server 函数 | SQL Server 实例 | Oracle 函数 | Oracle 实例 | 输出结果 |
---|---|---|---|---|
GETDATE() | SELECT GETDATE(); | SYSDATE | SELECT SYSDATE FROM DUAL; | 2025-05-17 14:30:45 |
DATEADD | SELECT DATEADD(MONTH, 3, '2025-05-17'); | ADD_MONTHS | SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL; | 2025-08-17 |
DATEDIFF | SELECT DATEDIFF(DAY, '2025-01-01', '2025-05-17'); | 日期直接相减 | SELECT (SYSDATE - TO_DATE('2025-01-01','YYYY-MM-DD')) FROM DUAL; | 136 (天数差) |
FORMAT | SELECT FORMAT(GETDATE(), 'yyyy-MM-dd'); | TO_CHAR | SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; | 2025-05-17 |
四、逻辑与条件函数
SQL Server 函数 | SQL Server 实例 | Oracle 函数 | Oracle 实例 | 输出结果 |
---|---|---|---|---|
ISNULL | SELECT ISNULL(NULL, 'Default'); | NVL | SELECT NVL(NULL, 'Default') FROM DUAL; | Default |
COALESCE | SELECT COALESCE(NULL, NULL, 'Value'); | COALESCE | SELECT COALESCE(NULL, NULL, 'Value') FROM DUAL; | Value |
CASE | SELECT CASE WHEN 10 > 5 THEN 'Yes' ELSE 'No' END; | CASE | SELECT CASE WHEN 10 > 5 THEN 'Yes' ELSE 'No' END FROM DUAL; | Yes |
IIF | SELECT IIF(10 > 5, 'True', 'False'); | DECODE | SELECT DECODE(10, 5, 'False', 'True') FROM DUAL; | True |
五、聚合与窗口函数
SQL Server 函数 | SQL Server 实例 | Oracle 函数 | Oracle 实例 | 输出结果 |
---|---|---|---|---|
SUM | SELECT SUM(Sales) FROM Orders; | SUM | SELECT SUM(Sales) FROM Orders; | 15000.00 (示例) |
ROW_NUMBER | SELECT ROW_NUMBER() OVER (ORDER BY Sales DESC); | ROW_NUMBER | SELECT ROW_NUMBER() OVER (ORDER BY Sales DESC) FROM Orders; | 生成行号序列 |
STRING_AGG | SELECT STRING_AGG(Name, ',') FROM Employees; | LISTAGG | SELECT LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) FROM Employees; | Alice,Bob,Charlie |
注意事项
-
语法差异:
-
SQL Server 使用
SUBSTRING
,Oracle 使用SUBSTR
(参数顺序一致)。 -
Oracle 的
CONCAT
仅支持两个参数,需嵌套调用拼接多个值(如CONCAT(CONCAT('A', 'B'), 'C')
)。
-
-
日期处理灵活性:
-
Oracle 允许直接对日期进行加减运算(如
SYSDATE + 1
表示加一天),而 SQL Server 需使用DATEADD
。
-
-
空值处理:
-
SQL Server 的
ISNULL
对应 Oracle 的NVL
,但COALESCE
在两者中行为一致。
-
-
版本兼容性:
-
SQL Server 的
STRING_AGG
需 2017+ 版本,Oracle 的LISTAGG
需 11g R2+ 版本。
-