02 concat和concat_ws函式的使用
阿新 • • 發佈:2020-11-28
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