开发过程中经常会遇到一些提取字符串中数字做递增的需求,例如把杭上0001人调字第X号与杭上清0005人调字第X号取出数字做递增,这种没什么规律,又不好截取,如果能提取出汉字中对应的数字取最大值做递增就很方便了。
提取字符串思路就是遍历字符串中每个字符,判断ascii码是否是数字,在这使用自定义函数实现
创建自定义函数
CREATE FUNCTION get_number (param varchar(50))
RETURNS varchar(30)
BEGIN
DECLARE length INT DEFAULT 0;
DECLARE temp_str varchar(50) default '';
set length=CHAR_LENGTH(param);
WHILE length > 0 DO
IF (ASCII(mid(param,length,1))>47 and ASCII(mid(param,length,1))<58 )THEN
set temp_str = concat(temp_str,mid(param,length,1));
END IF;
SET length = length - 1;
END WHILE;
RETURN REVERSE(temp_str);
END;
创建测试表
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1', '杭上0001人调字第X号');
INSERT INTO `test` VALUES ('2', '杭上清0005人调字第X号');
调用自定义函数
SELECT get_number(name) from test;