02 concat和concat_ws函数的使用

0X 01背景

用于将多个字符串连接成一个字符串。将一班学生的学号、学名姓名、别名三个字段拼接起来。

  • 赵云别名为 ''
  • 张飞别名为 null
  • 关羽别名为 美髯公

image.png

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 )
SELECT
	stu_id,
	stu_name,
	alias,
	concat( stu_id, stu_name, alias ) AS stu_info 
FROM
	student 
WHERE
	cls_id=1

image.png

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

image.png

posted @ 2020-11-28 14:12  在线打工者  阅读(2816)  评论(0编辑  收藏  举报