创建了一张表,如下
CREATE TABLE label_table (
company varchar(200) PRIMARY KEY ,
label varchar(255),
label_num varchar(255)
);
第一列插入内容举例为A,B,C
第二列插入内容为纯字母无规律字符串,例如'hjdk','dfdkldg'
插入时,两个参数需要一起提供,例如('A','gdhjk')
如果A不存在,则插入以上内容,如果表中已经存在主键A,则第二个字段追加在已有字段之后,
例如表中已经存在(A,dhk)
再插入(A,jd),则最终字段为(A,dhkjd)
所以存储过程需要提供两个输入参数
以下这句似乎能达到类似的效果,仅作参考
INSERT INTO label_table VALUES('B', 'dfg')
ON DUPLICATE KEY UPDATE label=concat(label,'dfg');
例如现在表中有了这么两行数据
A,tyutyt
B,werwe
那么我希望表中第三列这样显示
A,tyutyt,t3y2u1
B,werwe, w2e2r1
也就是第三列是第二列对每个字母数量的统计,格式不限,只需要统计出每个字母的数量即可
存储过程,计算一个字符串中每一个字母的数量,今晚有效
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 广大菜鸟 2021-10-24 15:14关注
可能是版本问题,前面的几位写的不错,但我的版本显示不了一些函数,我学习后也写了,希望对题主有帮助
1、创建表格CREATE TABLE label_table ( company varchar(200)PRIMARY KEY , label varchar(255), label_num varchar(255) );
2、定义存储过程
delimiter $$ drop procedure if exists insert_update_table; create procedure insert_update_table(In in_company varchar(200), In in_label varchar(255)) BEGIN declare selectedCOUNT int default 0; declare newLabel varchar(200) default ''; declare oldLabel varchar(200); declare newLabelNum varchar(400); declare tmpStr varchar(200); declare newLabelCopy varchar(200); declare t int; # 声明一个自定义的变量 select count(*) into selectedCOUNT from label_table where label_table.company=in_company; if (selectedCOUNT>0) then select label into oldLabel from label_table where label_table.company=in_company; set oldLabel = IFNULL(oldLabel, ''); set newLabel = CONCAT(oldLabel , in_label); else set newLabel = in_label; end if; set newLabelNum = ''; set newLabelCopy = newLabel; while length(newLabelCopy)>0 DO set tmpStr = left(newLabelCopy,1); set t = length(newLabelCopy)-length(replace(newLabelCopy,tmpStr,'')); set newLabelNum = CONCAT(newLabelNum , tmpStr , concat(t,'')); set newLabelCopy = replace(newLabelCopy,tmpStr,''); end while; if (selectedCOUNT>0) then update label_table SET label=newLabel, label_num=newLabelNum where company = in_company; else BEGIN insert into label_table(company,label,label_num) values(in_company,newLabel,newLabelNum); END; end if; COMMIT; END$$ delimiter ;
3. 测试,插入空字符串,相对应更新
INSERT INTO label_table(company,label) VALUES('A', 'tyutyt'); INSERT INTO label_table(company,label) VALUES('B', 'werwe'); select * from label_table; call insert_update_table('a',''); select * from label_table; call insert_update_table('b',''); select * from label_table;
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 java 的protected权限 ,问题在注释里
- ¥15 这个是哪里有问题啊?