众所周知,MySQL 没有 split 功能类函数,但是,按照某个分隔符拆分的情况却经常遇到,于是,我们可以利用 MySQL 提供的函数,自定义一个 split 功能的函数。
自定义 split 功能函数
话不多说,直接上函数定义。
DROP FUNCTION IF EXISTS `SPLIT_STR`;
DELIMITER ;;
CREATE FUNCTION `SPLIT_STR`(
x VARCHAR(255),
delimiter VARCHAR(12),
pos INT
) RETURNS varchar(255) CHARSET utf8mb4
RETURN REPLACE(
SUBSTRING(SUBSTRING_INDEX(x, delimiter, pos), LENGTH(SUBSTRING_INDEX(x, delimiter, pos -1)) + 1),
delimiter,
'')
;;
DELIMITER ;
演示结果
话不多说,直接开始演示:
1、先创建一个表 t_size,用来记录各种物品的尺寸
CREATE TABLE `t_size` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
`size` varchar(255) DEFAULT '' COMMENT '物品尺寸',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='物品尺寸表';
2、写入一些数据,其中 size 固定格式为【长,宽,高】,如果某项值缺少则为空
注意事项:为了确保测试的可靠性,我们插入数据时考虑到了各种可能为空字符串、为 null 的情况,因此,插入了丰富的数据。
INSERT INTO `t_size` (`name`, `size`) VALUES ('桌子', '30,20,10');
INSERT INTO `t_size` (`name`, `size`) VALUES ('椅子', ',20,10');
INSERT INTO `t_size` (`name`, `size`) VALUES ('柜子', '30,,10');
INSERT INTO `t_size` (`name`, `size`) VALUES ('凳子', '30,20,');
INSERT INTO `t_size` (`name`, `size`) VALUES ('担子', ',,');
INSERT INTO `t_size` (`name`, `size`) VALUES ('房子', '');
INSERT INTO `t_size` (`name`, `size`) VALUES ('票子', NULL);
3、查询数据,看效果!
假设有这样一个场景:有一天业务上需要将 size 拆分为长宽高三个字段。
此时,就可以使用自定义的 split 函数啦,无论是要清洗历史数据,还是展示给前端,都可实现。
select id,
name,
size,
split_str(size, ',', 1) as length,
split_str(size, ',', 2) as width,
split_str(size, ',', 3) as heigth
from t_size;
查询结果:
一张图总结知识点
笔记虽小,希望对你有用处,你的阅读是对我最大的鼓励,感谢支持!
关键词:MySQL,split,split_str,分组,函数,自定义函数。