7

存储过程,计算一个字符串中每一个字母的数量,今晚有效

 2 years ago
source link: https://ask.csdn.net/questions/7542350
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
你该好好学习 2021-10-23 11:49
采纳率: 50%
浏览 172

存储过程,计算一个字符串中每一个字母的数量,今晚有效

创建了一张表,如下
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
也就是第三列是第二列对每个字母数量的统计,格式不限,只需要统计出每个字母的数量即可

4条回答 默认 最新

  • 孙叫兽 2021-10-23 12:38

    这个不可以把第二列的数据拿到放到一个判断里然后放到第三列?

    img

    赞 踩 打赏 评论 2
    你该好好学习 2021-10-23 13:00
    不好意思,需要用存储过程来实现
    孙叫兽 回复 你该好好学习 2021-10-23 15:35

    SQL中并没有提供计算字符在字符串中出现的次数的函数,不过可以通过下面的思路来等价

    实现:首先计算字符串的长度,然后将字符串的所有“r”删掉,计算删掉“r”以后的字符串
    的长度,这两个长度之差就是字符“r”在字符串中出现的次数。

  • simtoba 2021-10-23 14:49

    create proc p1 @n1 varchar(200),@n2 varchar(255) AS
    DECLARE @t int,@i int,@str varchar(255),@s char(1),@str1 varchar(255),@s1 char(1)
    select @t=count(company) from test1 where company=@n1
    if @t>0
    update test1 set label=label+@n2 where company=@n1
    else
    insert into test1 (company,label) values(@n1,@n2)
    select @str=label from test1 where company=@n1
    set @i=0
    set @s=substring(@str,1,1)
    set @str1=''
    while @i<len(@str)+1
    begin
    set @i=@i+1
    if @i=1
    begin
    set @t=len(@str)-len(replace(@str,@s,''))
    set @str1=@str1 + @s + trim(str(@t))
    end
    if substring(@str,@i,1)<>@s and @i>1
    begin
    set @s1=substring(@str,@i,1)
    set @t=len(@str)-len(replace(@str,@s1,''))
    set @str=replace(@str,@s1,@s)
    set @str1=@str1 + @s1 + trim(str(@t))
    end
    end

      update test1 set label_num = @str1 where company=@n1   
    
    赞 踩 打赏 评论
  • 大榕树51 2021-10-23 17:08

    DELIMITER //
    CREATE PROCEDURE count_lable (
    IN c_company VARCHAR ( 200 ),
    IN c_label VARCHAR ( 255 ),
    IN c_label_num VARCHAR ( 255 ),
    )
    BEGIN

    DECLARE idx int, jdex int, c_c VARCHAR (1), c_temp VARCHAR (255), temp_label VARCHAR (255);
    DECLARE select_label VARCHAR (255);
    DECLARE row_count INT;
    set select_label = ELECT label from label_table where company = c_company;
    set idx = 1
    set temp_label = CONCAT(select_label, c_label)
    while idx <= len(temp_label)
    begin
    set c_c = substring(temp_label, idx, 1)-- 取得idx所在的这个字符
    set jdex = length(temp_label)-length(replace(temp_label, c_c ,''))
    set c_temp =CONCAT(c_c, convert(varchar(20), jdex));
    set c_label_num = CONCAT(c_label_num, c_temp);
    set idx = idx + 1
    end

    SELECT count(*) INTO row_count from label_table where company = c_company;
    IF (row_count=0) THEN
    INSERT INTO label_table( company, label, label_num) VALUES(company, temp_label, c_label_num);
    ELSE
    UPDATE label_table SET SET label = temp_label, label_num = c_label_num WHERE company = c_company;
    END IF;

    COMMIT;
    END

    赞 踩 打赏 评论
  • 广大菜鸟 2021-10-24 07:14

    可能是版本问题,前面的几位写的不错,但我的版本显示不了一些函数,我学习后也写了,希望对题主有帮助
    1、创建表格

    2、定义存储过程

    3. 测试,插入空字符串,相对应更新

    img

    赞 踩 打赏 评论

报告相同问题?

提交 关注问题

相关推荐 更多相似问题

  • 回答 3 已采纳 小写字母包括a到z,一共26个英文字母。 区分字符串字符属于特殊符号,或者是小写字母和大写字母,其本质是个字符在Unicode编码对应一个数字。a对应数字编码为97,z对应数字的编码
  • 回答 2 已采纳 a=input('type some letters:') z = {x:a.count(x) for x in set([n for n in a])} print(z)

     

  • 回答 3 已采纳

    # 用正则表达式把不是字母字符都删除。 import re

    s1 = "2aA3bB5" s2 = re.sub(r'[^A-Za-z]','',s1) print(s2)

    # 用fo

  • i++){//以i为A“子字符串”首位,遍历B,看B与A[i]起的子字符串最大匹配数量是多少,记为count[i],个count[i]对应A一个字符 for(j = 0;j (B);j++){ while(A[i + c] == B[j]){//准备了一个c做偏移,...
  • 冰块儿+奶茶的博客 计算一个字符串个字符出现的次数 分析: 1.使用Scanner获取用户输入的字符串 2.创建Map集合,key是字符串字符,value是字符的个数 3.遍历字符串,获取一个字符 4.使用获取到的字符,去Map集合判断key是否...
  • Aseveng的博客 package Map.Test; import java.util.Iterator;... * gdhavcbsacdfs 获取该字符串 一个字母出现的次数 * 要求打印结果是 :a{2} b{1}....; * 思路: * 对于结果的分析发现 ,字母和次数之间存在着映射的关系
  • 回答 4 已采纳 lb = ["a", "b", "d"] s = "asdaeqwezxcsdxvsr"; num = 0 for item in lb: num += s.count(item) prin
  • 回答 2 已采纳 这个针对你上面的是可以的,如果要想加一些的自适应的代码,可以自己加一点. ``` #include

    int main() { char str[5] = "abcd"; int

  • 回答 4 已采纳

    How to remove the last letter from the string?

    In Go, character strings are UTF-8 encoded.

  • timekeeper_guo的博客 获取字符串字母出现的次数,格式a(2)b(0)c(2) 思路: 能存储映射关系的容器有数组和map集合(set虽然保证了唯一性,但是不能存储映射关系) 关系一方不存在有序编号,使用map,还可以保证唯一性的一方具备着...
  • Rookie_Max的博客 计算字符个字符出现的数量,不使用count方法 "abacdce" a出现的次数是2次 b出现的次数是1次 c出现的次数是2次 d出现的次数是1次 e出现的次数是1次 """ string = input("请输入任意字符:") dict01 =...
  • Anthony_tester的博客 不管是自动化测试,还是测试开发,或者高级测试工程师,国内很多公司都...给出一个字符串,统计出字母出现的次数。 思路分析:  需要统计字母字母出现次数,这个第一反应就想起了编程语言的字典概念,字母
  • 回答 4 已采纳 如下: public static void main(String[] args) { // TODO Auto-generated method stub Scan
  • 回答 2 已采纳 通过ASCII码就行,很简单。
  • 回答 2 已采纳 String 本身就有 length 属性可以获取长度的,将长度存入数组的话,就是数组的基本用法呢。 学而不思则罔呀!
  • 肖佳嘉的博客 附上代码 ... import java.util.HashMap; public class Case6_Map_4 { public static void main(String[] args) { //创建字符串 final String s = "aaaaaabbbbbbbccccccdddddeeeeeffffffggg...
  • 小时候挺菜的博客 unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; for (i = 0;...利用一个数组,记录个字符串的个数,另一个flag数组标记已经计数过的字符串
  • 秋了个白的博客 编写程序输入一个字符串,分别统计输出该字符串字母个数和数字个数 算法分析:判断字母和数字的核心方法是依靠 ASCII 码进行,所以对字符串个字符逐个判断即可得到结果。实现方法依然是依靠指针。 程序...
  • 回答 7 已采纳

    ``` public string GetSubstring(string s) { string r = ""; int cha

  • 谢永奇1的博客 关于计算一个字符串存在的相同字符串个数 这个代码采用了比较简单的思路做的,没有储存起来这是比较不好的一个地方,但是也比较容易让人接受 思路: 循环一个与最后一个比较,计算出个数,然后 防止重复输出...
  • 没有解决我的问题, 去提问

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK