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+ 版本。
相关推荐
heartbeat..3 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据5 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦6 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区7 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录8 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong8 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术9 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
oMcLin9 小时前
如何在Oracle Linux 8.4上搭建并优化Kafka集群,确保高吞吐量的实时数据流处理与消息传递?
linux·oracle·kafka
黑白极客9 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海10 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache