SQL Server 与 Oracle 常用函数对照表

一、字符串处理函数
SQL Server 函数SQL Server 实例Oracle 函数Oracle 实例输出结果
CONCATSELECT CONCAT('A', 'B', 'C');CONCATSELECT CONCAT('A', 'B') FROM DUAL;ABC(SQL)
AB(Oracle)
SUBSTRINGSELECT SUBSTRING('Hello', 2, 3);SUBSTRSELECT SUBSTR('Hello', 2, 3) FROM DUAL;ell
CHARINDEXSELECT CHARINDEX('@', 'user@test.com');INSTRSELECT INSTR('user@test.com', '@') FROM DUAL;5
REPLACESELECT REPLACE('2023-01', '-', '/');REPLACESELECT REPLACE('2023-01', '-', '/') FROM DUAL;2023/01
LENSELECT LEN('SQL Server');LENGTHSELECT LENGTH('Oracle') FROM DUAL;10(SQL)
6(Oracle)

二、数值计算函数
SQL Server 函数SQL Server 实例Oracle 函数Oracle 实例输出结果
ROUNDSELECT ROUND(123.4567, 2);ROUNDSELECT ROUND(123.4567, 2) FROM DUAL;123.4600(SQL)
123.46(Oracle)
CEILINGSELECT CEILING(3.2);CEILSELECT CEIL(3.2) FROM DUAL;4
FLOORSELECT FLOOR(3.8);FLOORSELECT FLOOR(3.8) FROM DUAL;3
ABSSELECT ABS(-15.5);ABSSELECT ABS(-15.5) FROM DUAL;15.5
RANDSELECT RAND();DBMS_RANDOM.VALUESELECT DBMS_RANDOM.VALUE(0,1) FROM DUAL;0.7634(示例)

三、日期与时间函数
SQL Server 函数SQL Server 实例Oracle 函数Oracle 实例输出结果
GETDATE()SELECT GETDATE();SYSDATESELECT SYSDATE FROM DUAL;2025-05-17 14:30:45
DATEADDSELECT DATEADD(MONTH, 3, '2025-05-17');ADD_MONTHSSELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;2025-08-17
DATEDIFFSELECT DATEDIFF(DAY, '2025-01-01', '2025-05-17');日期直接相减SELECT (SYSDATE - TO_DATE('2025-01-01','YYYY-MM-DD')) FROM DUAL;136(天数差)
FORMATSELECT FORMAT(GETDATE(), 'yyyy-MM-dd');TO_CHARSELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;2025-05-17

四、逻辑与条件函数
SQL Server 函数SQL Server 实例Oracle 函数Oracle 实例输出结果
ISNULLSELECT ISNULL(NULL, 'Default');NVLSELECT NVL(NULL, 'Default') FROM DUAL;Default
COALESCESELECT COALESCE(NULL, NULL, 'Value');COALESCESELECT COALESCE(NULL, NULL, 'Value') FROM DUAL;Value
CASESELECT CASE WHEN 10 > 5 THEN 'Yes' ELSE 'No' END;CASESELECT CASE WHEN 10 > 5 THEN 'Yes' ELSE 'No' END FROM DUAL;Yes
IIFSELECT IIF(10 > 5, 'True', 'False');DECODESELECT DECODE(10, 5, 'False', 'True') FROM DUAL;True

五、聚合与窗口函数
SQL Server 函数SQL Server 实例Oracle 函数Oracle 实例输出结果
SUMSELECT SUM(Sales) FROM Orders;SUMSELECT SUM(Sales) FROM Orders;15000.00(示例)
ROW_NUMBERSELECT ROW_NUMBER() OVER (ORDER BY Sales DESC);ROW_NUMBERSELECT ROW_NUMBER() OVER (ORDER BY Sales DESC) FROM Orders;生成行号序列
STRING_AGGSELECT STRING_AGG(Name, ',') FROM Employees;LISTAGGSELECT LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) FROM Employees;Alice,Bob,Charlie

注意事项

  1. 语法差异

    • SQL Server 使用 SUBSTRING,Oracle 使用 SUBSTR(参数顺序一致)。

    • Oracle 的 CONCAT 仅支持两个参数,需嵌套调用拼接多个值(如 CONCAT(CONCAT('A', 'B'), 'C'))。

  2. 日期处理灵活性

    • Oracle 允许直接对日期进行加减运算(如 SYSDATE + 1 表示加一天),而 SQL Server 需使用 DATEADD

  3. 空值处理

    • SQL Server 的 ISNULL 对应 Oracle 的 NVL,但 COALESCE 在两者中行为一致。

  4. 版本兼容性

    • SQL Server 的 STRING_AGG 需 2017+ 版本,Oracle 的 LISTAGG 需 11g R2+ 版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值