考虑以下数组:
"Bank of America" => "BOA",
"Microsoft" => "MSFT",
"Berkshire Hathaway" => "BRK"
实际上,该数组有 100 对长。如果我有一个带有文本记录的 MySQL 表“字符串”:
str_id str_text
-------------------------------------------------------------
1 I wish I had bought Berkshire Hathaway in the 1980's!
2 Microsoft to release Windows 8 in 4 flavours
有没有办法 - 在 SQL 中! - 循环遍历所有数百万条记录并用其股票代码替换所有公司名称?那么当查询完成时,字符串表将如下所示?
str_id str_text
-------------------------------------------------------------
1 I wish I had bought BRK in the 1980's!
2 MSFT to release Windows 8 in 4 flavours
我之所以这么问,是因为使用 PHP 是可能的,但这本质上会比较慢,因为我必须检索几千条记录,循环遍历它们,更新它们,使用 crontab 等检索更多数千条记录。
最佳答案
不使用 PHP 的替代方案(仅限 MySQL):
创建MySQL过程:
DELIMITER //
DROP PROCEDURE IF EXISTS replace_strings//
CREATE PROCEDURE replace_strings(IN table_name VARCHAR(100), IN field_name VARCHAR(100))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE str_from VARCHAR(255);
DECLARE str_to VARCHAR(255);
DECLARE cur1 CURSOR FOR SELECT string_from, string_to FROM replacements;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO str_from, str_to;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql_command = CONCAT("UPDATE ",table_name," SET ",field_name," = REPLACE(",field_name,", '",str_from,"', '",str_to,"')");
PREPARE stmt FROM @sql_command;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur1;
END //
DELIMITER ;
使用字段 string_from
和 string_to
创建表replacements
。向该表添加可能的自动更改。
在代码中使用过程调用:
CALL replace_strings('strings','str_text');
关于mysql - 是否可以在 MySQL 中搜索和替换字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195755/