Oracle CONCAT函数详解

一、简介与核心特性

CONCAT 是 Oracle 中用于字符串拼接的内置函数,它与 || 操作符功能相同,但在特定场景下具有独特价值。

特性 说明
核心能力 将两个字符串拼接成一个完整字符串
语法 CONCAT(string1, string2)
支持类型 CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB
NULL 行为 任一参数为 NULL 时,结果为 NULL
参数限制 原生只接受 2 个参数,超过需嵌套
等效性

二、基本语法与 NULL 处理

2.1 基本用法

sql

复制代码
--直接拼接两个字符串
复制代码
SELECT CONCAT('Hello', ' World') AS result FROM DUAL;
复制代码
--结果: Hello World
复制代码
复制代码
--拼接表字段
复制代码
SELECT CONCAT(first_name, last_name) AS full_name FROM employees;

2.2 NULL 处理陷阱(重要)

当任一参数为 NULL 时,CONCAT 会将整个结果置为 NULL。这与 || 操作符的行为存在差异。

sql

复制代码
--❌NULL会导致整个结果为NULL
复制代码
SELECT CONCAT('Hello', NULL) AS result FROM DUAL;
复制代码
--结果: (空)
复制代码
复制代码
--✅使用NVL或COALESCE预先处理NULL值
复制代码
SELECT CONCAT(NVL(first_name, ''), ' ') AS name FROM employees;

对比一图看懂:

text

复制代码
┌─────────────────────────────────────────────────────────────┐
复制代码
│                    CONCAT 与 || 对 NULL 的处理对比            │
复制代码
├─────────────────────────────────────────────────────────────┤
复制代码
│                                                             │
复制代码
│  场景:字符串 A = 'Hello' ,字符串 B = NULL                  │
复制代码
│                                                             │
复制代码
│  CONCAT(A, B)       →        NULL  (整体被污染)              │
复制代码
│  A || B             →        Hello  (保留有效部分)           │
复制代码
│                                                             │
复制代码
│  ⚠️ CONCAT 在拼接时任一字符串为NULL,结果即为NULL            │
复制代码
│  ✅ 拼接前务必用 NVL 处理可能为NULL的字段                     │
复制代码
│                                                             │
复制代码
│  最佳实践:                                                  │
复制代码
│  SELECT CONCAT(NVL(last_name, ''), ', ') ...               │
复制代码
└─────────────────────────────────────────────────────────────┘

⚠️ 关键风险 :如果直接拼接可能为 NULL 的字段(如某些员工的 last_name 为空),整个结果会被置为 NULL,造成"隐式丢失数据"。务必在拼接前使用 NVL 或 COALESCE 进行处理。

相关推荐
这个DBA有点耶2 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G2 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备2 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远2 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安2 天前
MySQL-触发器
数据库·mysql
白远山2 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro2 天前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
2603_965148112 天前
AI+API选品:下一代智能商务助手雏形已现
java·大数据·数据库·人工智能·数据挖掘