02 concat和concat_ws函数的使用
0X 01背景
用于将多个字符串连接成一个字符串。将一班学生的学号、学名姓名、别名三个字段拼接起来。
- 赵云别名为 ''
- 张飞别名为 null
- 关羽别名为 美髯公
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stu_id` int(11) NOT NULL,
`stu_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
`alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '别名',
`cls_id` int(11) NULL DEFAULT NULL COMMENT '班级ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `cls_id`) VALUES (1, 1001, '赵云', '', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `cls_id`) VALUES (2, 1002, '张飞', NULL, 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `cls_id`) VALUES (3, 1003, '关羽', '美髯公', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `cls_id`) VALUES (4, 2001, '司马懿', NULL, 2);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `alias`, `cls_id`) VALUES (5, 2002, '夏侯惇', NULL, 2);
0X 02 concat
concat
方法返回的结果为连接参数产生的字符串。
- 如果任何一个参数为
null
,则返回值为null
。 - 如果任何一个参数含有二进制字符串,则结果为一个二进制字符串(非二进制的会被转换为与之相等的二进制格式字符串)
- 可以使用cast进行显示类型转换
select concat( cast( column1 as char ), column2 )
- 可以使用cast进行显示类型转换
SELECT
stu_id,
stu_name,
alias,
concat( stu_id, stu_name, alias ) AS stu_info
FROM
student
WHERE
cls_id=1
0X 03 concat_ws
concat_ws
方法是concat
的特殊形式。第一个参数指定分隔符,分隔符可以是一个字符串,也可以是其他参数。
- 如果分割符是null,则结果为null
- 函数会忽略分隔符后的null值
3.1 忽略分割符后的null
SELECT
stu_id,
stu_name,
alias,
concat_ws( ',', stu_id, stu_name, alias ) AS stu_info
FROM
student
WHERE
cls_id =1
知行合一