我使用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
(我可以有其他特殊字符,不仅是'@'和'+')
我该怎么做?
答案 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)
你能做的是,
Update YourTable set prod_type = YourFunction(product_name )