您好我想通过使用Like查询转义特殊字符来搜索字符串。
我的字符串 - abc& ABC
列值 - abc& ABC
不知何故,我不想在此搜索功能中包含特殊字符。
我可以使用REGEX
preg_replace with /[^A-Za-z0-9\-]/
转义我的字符串
我想要的是一些mysql函数,它可以替换仅用于获取搜索结果的列值,但不应更新列值。
所以我将传递abc abc字符串,它将匹配具有值abc abc的列。
实际上 - SELECT * FROM MyTable WHERE myColumn LIKE 'abc abc';
它应该给我结果。
答案 0 :(得分:0)
DROP FUNCTION IF EXISTS RemoveSpecialChar;
DELIMITER $
CREATE FUNCTION RemoveSpecialChar(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) NOT IN(35, 38,37, 42, 64, 94) THEN
SET out_str = CONCAT(out_str, c);
END IF;
SET pointer = pointer + 1;
END WHILE; END IF;
RETURN out_str;
END$
DELIMITER ;
以下查询正在运作
SELECT RemoveSpecialChar(loginPass) FROM users
如果函数
,您需要在下面添加所有必需字符的ascii值 IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN
所以你的查询将是
SELECT * FROM MyTable WHERE myColumn LIKE RemoveSpecialChar('abc & abc')