在MySQL存储过程中删除撇号的难度

时间:2013-03-06 00:58:20

标签: mysql stored-procedures

我正在尝试删除撇号,下面是整个过程。

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搜索了我能想到的一切,并且已经将头发拉了几个小时。谢谢!

2 个答案:

答案 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,这也有效。