在MySQL插入过程中进行消毒

时间:2018-09-12 14:50:29

标签: mysql

我目前正在像这样进行MySQL插入:

INSERT INTO RESI (MarketingRemarks) 
SELECT PropertyInformation FROM `property_res`;

然后我运行独立的命令来清除RESI表中的任何奇怪字符,如下所示:

UPDATE RESI SET MarketingRemarks = REPLACE(MarketingRemarks, '“', '"');
UPDATE RESI SET MarketingRemarks = REPLACE(MarketingRemarks, '”', '"');
UPDATE RESI SET MarketingRemarks = REPLACE(MarketingRemarks, '–', '-');
UPDATE RESI SET MarketingRemarks = REPLACE(MarketingRemarks, '½', '1/2');
UPDATE RESI SET MarketingRemarks = REPLACE(MarketingRemarks, '’', '\'');

拥有所有这些查询似乎效率很低。有没有办法将其组合为单个INSERT语句?

我尝试了多种方法将REPLACE放入INSERT语句中,但是没有运气。

2 个答案:

答案 0 :(得分:1)

您可以在replace子句中使用select函数,如下所示:

INSERT INTO RESI (MarketingRemarks) 
SELECT REPLACE(REPLACE(PropertyInformation, '½', '1/2'), '“', '"') FROM `property_res`;

,您需要像@Arquillian提供的示例一样构建replace函数的链。

答案 1 :(得分:0)

我建议创建一个清理字符串的函数,并使用insert into命令中的函数。您将拥有一个易于阅读的代码。

DELIMITER $$
USE `nestor_dbo`$$
CREATE FUNCTION `Sanitize` (src NVARCHAR(100))
RETURNS NVARCHAR(100)
BEGIN
    DECLARE result NVARCHAR(100);

    SET result = src;

    SET result = replace(result, '“', '"');
    SET result = replace(result, '”', '"');
    SET result = replace(result, '–', '-');
    SET result = replace(result, '½', '1/2');
    SET result = replace(result, '’', '\'');

RETURN result;
END$$


INSERT INTO RESI (MarketingRemarks) 
SELECT Sanitize(PropertyInformation) FROM `property_res`;