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+ 版本。
相关推荐
麦聪聊数据1 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务1 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯2 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七3 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草3 小时前
redis-9-哨兵
数据库·redis·bootstrap
明哥说编程3 小时前
Dataverse自定义表查询优化:D365集成大数据量提速实战【索引配置】
数据库·查询优化·dataverse·dataverse自定义表·索引配置·d365集成·大数据量提速
xiaowu0803 小时前
C# 拆解 “显式接口实现 + 子类强类型扩展” 的设计思想
数据库·oracle
讯方洋哥3 小时前
HarmonyOS App开发——关系型数据库应用App开发
数据库·harmonyos
惊讶的猫4 小时前
Redis持久化介绍
数据库·redis·缓存
Apple_羊先森4 小时前
ORACLE数据库巡检SQL脚本--19、磁盘读次数最高的前5条SQL语句
数据库·sql·oracle