В настоящее время я делаю вставку 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, но не повезло.
Вы можете использовать функцию replace
в своем предложении select
, например:
INSERT INTO RESI (MarketingRemarks)
SELECT REPLACE(REPLACE(PropertyInformation, '½', '1/2'), '"', '"') FROM 'property_res';
и вам нужно построить цепочку вашей функции replace
как в примере, представленном @Arquillian
Я бы предложил создать функцию, которая санирует строку, и использовать функцию из вставки в команду. У вас будет легко читаемый код.
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';