mySQL设置了一个没有特殊字符的varchar

时间:2014-06-03 10:50:03

标签: mysql

我使用mySQL作为DBMS, 我的表中有这些行:

product_name | product_code | prod_type
prod1@00X    |  1           |    
@prod2@00X   |  2           | 
+prod3@@00X  |  3           | 

我想设置prod_type = product_name而不使用特殊字符。

=> prod_type

   prod100X
   prod200X
   prod300X

(我可以有其他特殊字符,不仅是'@'和'+')

我该怎么做?

3 个答案:

答案 0 :(得分:2)

方法1:

您可以使用REPLACE()方法删除mysql中的特殊字符,但不知道它是否非常高效。但它应该有用。

如下所示:

SELECT Replace(Replace(product_name,'@',''),'+','')  as prod_type
From Table1

<强> Fiddle Demo

方法2:

如果您拥有All other Special Charcter,请使用此(Source

-- ---------------------------- 
-- Function structure for `udf_cleanString` 
-- ---------------------------- 
DROP FUNCTION IF EXISTS `udf_cleanString`; 
DELIMITER ;; 
CREATE FUNCTION `udf_cleanString`(`in_str` varchar(4096)) RETURNS varchar(4096) CHARSET utf8 
BEGIN    
      DECLARE out_str VARCHAR(4096) DEFAULT ''; 
      DECLARE c VARCHAR(4096) DEFAULT ''; 
      DECLARE pointer INT DEFAULT 1; 

      IF ISNULL(in_str) THEN 
            RETURN NULL; 
      ELSE 
            WHILE pointer <= LENGTH(in_str) DO 

                  SET c = MID(in_str, pointer, 1); 

                  IF ASCII(c) > 31 AND ASCII(c) < 127 THEN 
                        SET out_str = CONCAT(out_str, c); 
                  END IF; 

                  SET pointer = pointer + 1; 
            END WHILE; 
      END IF; 

      RETURN out_str; 
END 
;; 
DELIMITER ;

之后只需按如下方式调用该函数:

SELECT product_name, udf_cleanString(product_name) AS 'product_Type' 
FROM table1;

答案 1 :(得分:1)

SELECT Replace(Replace(product_name,'@',''),'+','') 
From Table

如果其他特殊字符尝试嵌套Replace

像这样

 select REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(product_name, '/', ''),'(',''),')',''),' ',''),'+',''),'-',''),'@','');

或尝试使用Regex

答案 2 :(得分:0)

你能做的是,

  1. 创建一个删除特殊字符的功能,您可以从refernece
  2. 中找到
  3. 使用查询Update YourTable set prod_type = YourFunction(product_name )