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+ 版本。
相关推荐
木棉软糖2 分钟前
5 步确认 TiDB 历史抽数的 Logstash 有没有真的写进 ES
elasticsearch·oracle·tidb
贝锐6 分钟前
金仓、达梦、TDSQL全适配:向日葵补齐信创数据库层远程运维能力
运维·数据库·信创
xixiaoyunya36 分钟前
Redis缓存三大问题实战:穿透、击穿、雪崩,我用一个电商秒杀场景讲清楚
数据库·redis·缓存
这个DBA有点耶2 小时前
Merge还是Materialize?一文讲透MySQL 8.0 CTE底层的执行计划博弈与性能陷阱
数据库·mysql·架构
Thanks_ks2 小时前
MySQL 的 REPEATABLE READ 到底能不能防幻读——从快照读、当前读到 Next-Key Lock
数据库·mysql·innodb·mvcc·锁机制·事务隔离级别·间隙锁
千桐科技3 小时前
qKnow智能体构建平台专业版 v3.1.5 发布:扩容工作流编排调用能力,上线Text2SQL插件,拓宽数据类智能应用构建边界
服务器·数据库·oracle·qknow
宇灬宇3 小时前
oracle直方图测试
数据库·oracle
Henry-SAP3 小时前
SAP PP中的核心业务流程——离散制造、重复制造、流程制造三大模式解析
前端·数据库·人工智能·制造
Pniubi3 小时前
mysql 一张表可以有多少列
数据库·mysql