在数据库开发场景中,将多个字段或者字符串片段拼接成完整字符串是高频操作,不同数据库厂商提供的字符串连接函数语法和实现逻辑各不相同,掌握这些函数的用法能大幅提升开发效率。

MYSQL字符串连接函数
CONCAT函数
MYSQL中最常用的字符串连接函数是CONCAT,它可以接收多个参数,将所有参数按传入顺序拼接成一个字符串,如果任意一个参数为NULL,返回结果就是NULL。
-- 拼接多个字符串常量
SELECT CONCAT('Hello', ' ', 'World') AS result;
-- 拼接表中的字段,假设存在user表,有first_name和last_name字段
SELECT CONCAT(first_name, '_', last_name) AS full_name FROM user;
-- 测试NULL值的影响
SELECT CONCAT('abc', NULL, 'def') AS null_result;CONCAT_WS函数
CONCAT_WS是带分隔符的字符串连接函数,第一个参数是分隔符,后面的参数是要拼接的内容,会忽略NULL值,不会像CONCAT那样遇到NULL就返回NULL。
-- 用逗号作为分隔符拼接字符串
SELECT CONCAT_WS(',', 'Apple', 'Banana', 'Orange') AS fruit_list;
-- 拼接时忽略NULL值
SELECT CONCAT_WS('-', '2024', NULL, '05', '20') AS date_str;
-- 拼接表字段,分隔符为下划线
SELECT CONCAT_WS('_', user_id, first_name, last_name) AS user_code FROM user;ORACLE字符串连接函数
CONCAT函数
ORACLE的CONCAT函数只能接收两个参数,如果要拼接多个字符串需要嵌套调用,同样遇到NULL参数会返回NULL。
-- 拼接两个字符串常量
SELECT CONCAT('Hello', 'World') AS result FROM DUAL;
-- 嵌套拼接多个字符串
SELECT CONCAT(CONCAT('Hello', ' '), 'World') AS multi_result FROM DUAL;
-- 拼接表字段
SELECT CONCAT(first_name, last_name) AS full_name FROM user_table;|| 连接符
ORACLE支持使用双竖线作为字符串连接符,可以拼接多个字符串,用法更灵活,比CONCAT函数更常用。
-- 用||拼接多个字符串常量 SELECT 'Hello' || ' ' || 'World' AS result FROM DUAL; -- 拼接表字段并添加固定前缀 SELECT 'USER_' || user_id || '_' || user_name AS user_tag FROM user_table; -- 处理NULL值,用NVL函数转换NULL为空字符串 SELECT first_name || NVL(middle_name, '') || last_name AS full_name FROM user_table;
SQL SERVER字符串连接函数
加号连接符
SQL SERVER使用加号作为字符串连接符,拼接逻辑和ORACLE的||类似,如果遇到NULL值,需要手动处理,否则结果会是NULL。
-- 用加号拼接字符串常量
SELECT 'Hello' + ' ' + 'World' AS result;
-- 拼接表字段
SELECT first_name + ' ' + last_name AS full_name FROM user_info;
-- 处理NULL值,用ISNULL函数转换NULL为空字符串
SELECT first_name + ISNULL(' ' + middle_name, '') + ' ' + last_name AS full_name FROM user_info;STRING_AGG函数
SQL SERVER 2017及以上版本支持STRING_AGG函数,用于将分组内的多个字符串拼接成一个,还可以指定分隔符,适合分组拼接场景。
-- 假设存在student表,有class_id和student_name字段,按班级拼接学生姓名 SELECT class_id, STRING_AGG(student_name, ',') AS student_list FROM student GROUP BY class_id; -- 拼接时排序 SELECT class_id, STRING_AGG(student_name, '|') WITHIN GROUP (ORDER BY student_name ASC) AS sorted_student_list FROM student GROUP BY class_id;
通用注意事项
- 拼接前确认字段的数据类型,非字符串类型需要先转换,比如用CAST或者CONVERT函数转成字符串再拼接。
- 不同数据库对NULL值的处理逻辑不同,拼接前建议先处理NULL,避免返回不符合预期的结果。
- 如果拼接内容过长,需要注意数据库对字符串长度的限制,避免拼接后字符串超出长度上限导致截断。
实际开发中可以根据使用的数据库类型,选择对应的字符串连接函数,结合具体业务场景灵活调整拼接逻辑,保证字符串拼接结果符合需求。