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 で 1 つのリテラルの単一引用符を意味する 2 つの単一引用符を使用することもできます。

REPLACE("I wan't to be alone", '''', '') 

参考までに、標準 SQL では、二重引用符はテーブル名や列名などの識別子を区切るためのものです。一重引用符は、文字列と日付を区切るためのものです。二重引用符を単一引用符と同じように扱うのは非標準の MySQLism です。ただし、上記の例では使用しているため、アポストロフィをエスケープする必要はありません。


私もテストしました:

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 に答える