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