3

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

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, '%\'%', '');

这似乎适用于任何其他字符,但不适用于撇号。这里似乎没有什么可以删除撇号字符。任何帮助,将不胜感激。

我在谷歌上搜索了我能想到的所有东西,并且已经拔了几个小时的头发。谢谢!

4

2 回答 2

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");
于 2013-03-06T02:50:32.280 回答
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 |
+-----+--------------------+

它似乎工作得很好。我还对 _myparam 使用 VARCHAR(20) 进行了测试,这也有效。

于 2013-03-06T03:00:30.257 回答