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

注意事项

  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+ 版本。
相关推荐
sdk大全1 分钟前
Studio 3T for MongoDB 2025.13.0
数据库·mongodb
码农阿豪2 分钟前
平替MongoDB:金仓多模数据库助力电子证照国产化实践
数据库·mongodb
罗超驿3 分钟前
22.深入剖析JDBC架构:从原生API到企业级数据交互核心
java·数据库·mysql·面试
易辰君8 分钟前
【数据库】MongoDB深度解析与Python操作指南:从安装到实战操作全覆盖
数据库·mongodb
一直有一个ac的梦想12 分钟前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
身如柳絮随风扬18 分钟前
Redis 集群脑裂深度剖析:成因、危害与防丢失策略
数据库
雨辰AI1 小时前
人大金仓 V9 生产级专用监控大盘(含 120 + 指标 + 告警规则 + 一键导入)
java·开发语言·数据库·mysql·政务
l1t2 小时前
Hy-MT2-1.8B总结的pgvector 0.8.2解决了并行HNSW索引构建漏洞
数据库·人工智能·postgresql
我是一颗柠檬2 小时前
【MySQL全面教学】MySQL条件查询与排序Day4(2026年)
数据库·后端·mysql
丷丩2 小时前
Postgresql基础实践教程(四)
数据库·postgresql