2014-04-09 77 views
0

我想清理超過165個字符的太長元描述。我有這個疑問:SQL查找和替換變量

UPDATE ps_product_lang 
SET meta_description = REPLACE(meta_description, 'Depth 12 mm', '') 

唯一的問題是有不同的深度和可用而不是取代他們oine一個的,有沒有辦法做到這一點對所有的人?像

UPDATE ps_product_lang 
SET meta_description = REPLACE(meta_description, 'Depth * mm', '') * WHERE = any value 
+0

抱歉沒有包括它。 MySQL的。 – popkutt

+0

在本網站上搜索「regexp replace mysql」... – fancyPants

回答

0

MySQL的東西不具備這一點,因爲更換一個簡單的解決方案()不具有圖案,通配符或正則表達式的支持。

我會建議使用這樣的事情:

/* EXTENDED Functionality allows user to use patterns up to 100 characters long, not just 1 character 
/* Original @ http://www.nacodes.com/#ECHo75Y7RYXbgow0.99 */ 
DELIMITER $$ 
CREATE FUNCTION `regex_replace`(pattern VARCHAR(100),replacement VARCHAR(1000),original VARCHAR(1000)) 

RETURNS VARCHAR(1000) 
DETERMINISTIC 
BEGIN 
DECLARE temp VARCHAR(1000); 
DECLARE ch VARCHAR(100); 
DECLARE i INT; 
DECLARE j INT; 
DECLARE qbTemp VARCHAR(1000); 

SET i = 1; 
SET j = 1; 
SET temp = ''; 
SET qbTemp = ''; 

IF original REGEXP pattern THEN 
    loop_label: LOOP 
    IF i>CHAR_LENGTH(original) THEN 
    LEAVE loop_label; 
    END IF; 
    SET ch = SUBSTRING(original,i,CHAR_LENGTH(pattern)); 
    IF NOT ch REGEXP pattern THEN 
    SET temp = CONCAT(temp,LEFT(ch,1)); 
    SET i=i+1; 
    ELSE 
    SET temp = CONCAT(temp,replacement); 
    SET i=i+CHAR_LENGTH(pattern); 
    END IF; 
    END LOOP; 
ELSE 
    SET temp = original; 
END IF; 
SET temp = TRIM(BOTH replacement FROM temp); 
SET temp = REPLACE(REPLACE(REPLACE(temp , CONCAT(replacement,replacement),CONCAT(replacement,'#')),CONCAT('#',replacement),''),'#',''); 
RETURN temp; 
END$$ 
DELIMITER ; 

Source here

作爲替代方案,可以隨時將數據導出到文件,修改在文本編輯器中的字段或sed的,例如,並將其導回到MySQL。