开发过程中经常会遇到一些提取字符串中数字做递增的需求,例如把杭上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;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐