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

相关推荐
一只鹿鹿鹿3 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148113 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
AI砖家3 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq4 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec4 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界4 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队4 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
lambo mercy6 小时前
Day3:结构化输出
java·数据库·oracle
派小心.6 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
Είναι η κοπέλα6 小时前
向量数据库与嵌入模型:Chroma/FAISS/Milvus 选型
数据库·milvus·faiss