mysql - 是否可以在 MySQL 中搜索和替换字符串数组?

标签 mysql sql

考虑以下数组:

"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_fromstring_to 创建表replacements。向该表添加可能的自动更改。

在代码中使用过程调用:

    CALL replace_strings('strings','str_text');

关于mysql - 是否可以在 MySQL 中搜索和替换字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195755/

相关文章:

sql - 无法启动 T-SQL 调试。无法连接到计算机("*****")

c# - 使用 blob 数据搜索 MySQL 数据库?

mysql - MySQL 的复杂唯一约束

php - 无法从mysql多维数组获取键值

MySQL从table2中选择数据,其中table1.field相等(并将其添加到结果中)

c# - 存储过程 - 使用参数选择并填充文本框

sql - 重命名 Entity Framework T4 模板生成的类名?

MYSQL - 使用复合主键更新另一个表

1 个查询中的 PHP SQL

sql - 永久设置 Postgresql 架构路径