mysql 字典替换_字符串根据字典替换

这篇博客介绍了如何在MySQL中创建一个自定义函数`StringReplaceSplit`,该函数利用递归和临时表实现字符串根据给定字典进行替换。通过示例展示了如何将源字符串中的数字替换为对应的单词,例如将'1,2,3,4,5'转换为'one,two,three,four,five'。同时,文章也提到了函数仍有优化空间。" 109945146,10297321,Python编程:填空题解析与练习,"['Python编程', '基础练习', '算法', '输入输出', '循环结构']
摘要由CSDN通过智能技术生成

自己写的递归函数

DELIMITER $$

DROP FUNCTION IF EXISTS junk.StringReplaceSplit $$

CREATE FUNCTION junk.StringReplaceSplit (v_str VARCHAR(1024), v_split VARCHAR(1024)) RETURNS VARCHAR(1024)

DETERMINISTIC

BEGIN

DECLARE rv VARCHAR(1024);

DECLARE splist_count INT;

DECLARE i INT;

DROP TEMPORARY TABLE IF EXISTS tmp_table;

CREATE TEMPORARY TABLE tmp_table(v_key VARCHAR(100));

SET i = 1;

set splist_count = (length(v_str)-length(replace(v_str, v_split,'')))/length(v_split)+1;

WHILE i <= splist_count DO

INSERT INTO tmp_table

SELECT REPLACE(substring(substring_index(v_str, v_split, i),

length(substring_index(v_str, v_split, i-1)) + 1),

v_split, '');

SET i = i + 1;

END WHILE;

SELECT replace(group_concat(ifnull(wordlist.word, tmp_table.v_key)), ',', v_split) INTO rv

from tmp_table

LEFT JOIN wordlist on wordlist.id=tmp_table.v_key;

RETURN rv;

END $$

DELIMITER ;

效果:

源表

mysql> select * from teststring;

+----+----------------------------+

| id | String |

+----+----------------------------+

| 1 | 1,2,3,4,5 |

| 2 | 4,5,7,8,84 |

| 3 | key,23,344,12,3,9,34,3,1,3 |

+----+----------------------------+

3 rows in set (0.00 sec)

字典表

mysql> select * from wordlist;

+----+-------+

| id | word |

+----+-------+

| 1 | one |

| 2 | two |

| 3 | three |

| 4 | four |

| 5 | five |

| 7 | six |

| 8 | eight |

| 9 | nine |

| 10 | ten |

+----+-------+

9 rows in set (0.00 sec)

示例:

mysql> SELECT id, StringReplaceSplit(String,',') transform from teststring ;

+----+---------------------------------------------+

| id | transform |

+----+---------------------------------------------+

| 1 | one,two,three,four,five |

| 2 | four,five,six,eight,84 |

| 3 | key,23,344,12,three,nine,34,three,one,three |

+----+---------------------------------------------+

3 rows in set (0.04 sec)

函数有待优化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值