mysql - 使用 MySQL 替换多个字符
问题描述
我正在使用这段代码替换我的数据库的一列中的字符。
UPDATE items
SET items = REPLACE(items, 'ḇ','ḇ')
但现在我有一个将近 500 个字符的列表要替换。仅在一个查询中编写整个行序列是行不通的。
UPDATE items
SET items = REPLACE(items, 'ḇ','ḇ')
SET items = REPLACE(items, 'Ǡx;','x')
SET items = REPLACE(items, 'Ǡy;','y')
ETC.
或者我不知道怎么写。任何人都可以帮助我吗?
解决方案
创建一个将搜索字符串和替换字符串作为列的表。添加需要替换的所有 500 行。然后编写一个存储过程,该过程将从查找表中查找替换值并替换为该值。查找表可以很容易地从 Excel 或 csv 文件加载到 MySql 中。
这是显示循环和查找的伪代码。我知道它不会编译,我对 MySql 语法有点生疏。我通常在 Oracle 工作,所以伪代码语法更像 Oracle。
DECLARE
v_old_string varchar;
v_new_string varchar;
BEGIN
FOR v IN (SELECT * FROM items) LOOP
SELECT old_string, new_string
INTO v_old_string, v_new_string
FROM my_lookup_table
WHERE old_string = v.thestringcolumn;
UPDATE items
SET itemcolumn = REPLACE(itemcolumn, v_old_string, v_new_string)
WHERE itemcolumn = v_old_string;
END LOOP;
END;
推荐阅读
- angularjs - 如何在angularjs中使用alasql包装文本内容
- doxygen - 将 Doyxgen xml 输出转换为 DITA
- jquery - jQuery UI 调整大小,同时保持相同的整体宽度
- regex - 使用 RegEx 将大写转换为 title()
- actions-on-google - 我可以阻止参数被截断吗?
- javascript - 使用 Angularjs 在动态列表项中添加事件 stopPropagation
- android - 在 Realm 中实现回调并将其设置在 Presenter MVP 中以进行异步工作
- jquery - jQuery 序列化添加名为 '_' 的附加字段(下划线)
- php - 如何在 laravel 5.6 中使用 ajax 将数据从控制器传递到视图
- google-cloud-platform - 来自`datastore.NewQuery("").Ancestor(myKey)`的`datastore:invalid entity type`错误