我目前正在像这样进行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语句中,但是没有运气。
答案 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`;