我正在尝试删除撇号,下面是整个过程。
BEGIN
SET _myparam = replace(_myparam, "'", '');
UPDATE `Table` SET NAME=_myparam WHERE UID=_someotherparam;
END
我也尝试过:
SET _myparam = replace(_myparam, '\'', '');
SET _myparam = replace(_myparam, '''', '');
SET _myparam = replace(_myparam, CHAR(39), '');
SET _myparam = replace(_myparam, '%\'%', '');
这似乎适用于任何其他角色,但不适用于撇号。这里似乎没有任何东西可以删除撇号字符。任何帮助将不胜感激。
我用Google搜索了我能想到的一切,并且已经将头发拉了几个小时。谢谢!
答案 0 :(得分:1)
我刚刚测试了这个标准选择,它的工作原理。你刚试过吗
'\''
?
即,这适用于标准选择:
SELECT REPLACE("hi th'ere", '\'', '');
这不是:
SELECT REPLACE("hi th'ere",'%\'%', '');
当然这也有效:
SELECT REPLACE("hi th'ere","'", '');
编辑:以下是MySQL存储过程的解决方案。
DELIMITER //
CREATE PROCEDURE TestStoredProc(IN _myvariable VARCHAR(25))
BEGIN
SET _myvariable = REPLACE(_myvariable, '\'', '');
SELECT _myvariable;
END //
DELIMITER ;
和
CALL TestStoredProc("hi th'ere");
答案 1 :(得分:1)
您还可以使用两个单引号,这意味着标准SQL中的一个文字单引号。
REPLACE("I wan't to be alone", '''', '')
仅供参考,在标准SQL中,双引号用于分隔表名和列名等标识符。单引号用于分隔字符串和日期。将双引号视为与单引号相同,这是一种非标准的MySQL主义。但我在上面的例子中使用它,所以我不必逃避撇号。
我也测试过:
USE test;
DROP TABLE IF EXISTS `Table`;
CREATE TABLE `Table` (
UID INT PRIMARY KEY,
NAME TEXT
);
INSERT INTO `Table` VALUES (1, 'foo');
DROP PROCEDURE IF EXISTS q;
DELIMITER !!
CREATE PROCEDURE q(_myparam TEXT, _someotherparam INT)
BEGIN
SET _myparam = REPLACE(_myparam, '''', '');
UPDATE `Table` SET NAME=_myparam WHERE UID=_someotherparam;
END!!
DELIMITER ;
CALL q("I wan't to be alone", 1);
SELECT * FROM `Table`;
+-----+--------------------+
| UID | NAME |
+-----+--------------------+
| 1 | I want to be alone |
+-----+--------------------+
似乎工作得很好。我还使用VARCHAR(20)测试_myparam,这也有效。