从数据库中删除非字母/数字

时间:2014-07-14 16:59:13

标签: mysql

我使用Dragon Naturally Speaking处理一堆音频,结果导入数据库。现在我在数据库中有一堆疯狂的角色,如:�。如何摆脱所有不是“正常”空格或字母/数字的符号/其他东西?

1 个答案:

答案 0 :(得分:1)

DELETE FROM tbl WHERE results NOT REGEXP '[[:alnum:]]+' - 来自documentation

的调整

更新

因为我误解了@Alan的要求...... 我的第一个倾向是使用外部代码消除噪音。如果你不能这样做,MariaDB开箱即用REGEXP_REPLACE,对于正确的mysql,那里有exists a UDF类似的东西。所以,你使用类似的东西:

UPDATE tbl SET results = regexp_replace(results, '[^[:alnum:][:space:]]' '');

您可以使用this page中的功能:

DELIMITER $$
CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))

RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN
 DECLARE temp VARCHAR(1000);
 DECLARE ch VARCHAR(1);
 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,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  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 ;

然后我就能运行这个命令:

更新成绩单SET transcript = regex_replace(' [^ [:alnum:] [:space:]]','',transcript);``

希望有帮助...