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 进行处理。

相关推荐
豆豆2 小时前
2026年如何选择适合自己的网站管理系统?
数据库·cms·wordpress·建站系统·网站管理系统·建站软件·织梦
吴声子夜歌2 小时前
SQL经典实例——检索记录
数据库·sql
黄焖鸡能干四碗2 小时前
软件系统概要设计说明书模版(Word)
大数据·运维·数据库·架构·需求分析
dust_and_stars2 小时前
为什么ubuntu24 snap install code-server 不需要--classic?
网络·数据库
BomanGe22 小时前
NSK W1406FA系列长行程高速精密丝杠技术指南
运维·服务器·数据库·经验分享·规格说明书
之歆2 小时前
MongoDB 深度解析:从原理到实践的完整指南
数据库·mongodb
一 乐2 小时前
幼儿园管理系统|基于springboot + vue幼儿园管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·幼儿园管理系统
tiancaijiben2 小时前
阿里云日志服务SLS全流程对接与深度使用指南
网络·数据库
云计算磊哥@2 小时前
运维开发宝典028-MySQL04数据库热备
数据库·adb·运维开发