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+ 版本。
相关推荐
小白勇闯网安圈6 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨6 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图7 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl7 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
ltl7 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl7 小时前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
麻瓜code8 小时前
【Mysql】重新学一遍 SQL 执行顺序
数据库·sql
这个DBA有点耶9 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
一只fish9 小时前
优化器架构对比:Oracle vs PostgreSQL vs MySQL
mysql·postgresql·oracle
安_10 小时前
RAG的向量数据库:为LLM提供语义搜索能力
数据库