2013-03-06 2 views
3

아포스트로피를 제거하려고합니다. 전체 절차는 다음과 같습니다.MySQL 저장 프로 시저에서 아포스트로피 제거의 어려움

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

이 다른 문자가 아닌 아포스트로피와 함께 작동하는 것으로 보인다. 여기에 아포스트로피 특성을 제거하는 것으로 보이는 것은 없습니다. 어떤 도움을 주시면 감사하겠습니다.

내가 생각할 수있는 모든 것을 봤는데 몇 시간 동안 머리카락을 꺼냈다. 감사!

+0

일반적으로 대부분의 RDBMS의 경우 'SET'지정과 함께 'SELECT'문을 사용해야합니다. 일반적으로 변수를 여기에 표시된 함수와 같게 설정할 수는 없습니다. –

+1

@BaconBits 실제로 MySQL에서와 같이 잘 작동합니다. 'DECLARE '을 사용하여 변수를 초기화 할 수 있습니다. SET = blah()' – wired00

+0

@ wired00 아, 잘 알고 있습니다. 필자는 T-SQL 스타일 (MS SQL, Sybase) 및 PL/SQL 스타일 (Informix, Oracle, Postgres)에 익숙하므로 RDBMS가이 두 스타일 중 하나를 따를 것으로 가정합니다. 그들 중 대부분은 IMX입니다. –

답변

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"); 
+0

시도한 '\' '이 (가) 작동하지 않습니다. 또한, 나중에 직접 Update 행에서 _myvariable을 사용하고 있다는 것을 공유하고 싶었습니다. 그럴 경우에는 몇 가지 생각이 들게됩니다. SET _myvariable = replace (_myvariable, '\' ',' '); UPDATE'MyTable' SET NAME = _myvariable WHERE .... – user2137982

+0

위의 Stored Procedure에서 전체 솔루션 위에 게시하고 잘 작동합니다. 당신이 제공 한 샘플 밖에서 구문에 잘못된 것이있을 수 있기 때문에 전체 저장 프로 시저를 게시 할 수 있습니까? 즉, 처음에'SET'이 아닌 변수에'DECLARE'를 사용하고 있습니까? – wired00

+0

나는 REPLACE ("hi th'ere", " '",' ')도 시도하고 곧 업데이트 할 것입니다. – user2137982

1

또한 표준 SQL에 하나의 리터럴 작은 따옴표를 의미 두 개의 작은 따옴표를 사용할 수 있습니다.

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) 사용하여 테스트하고 너무 작동합니다.

+0

초기 게시물에 대한 업데이 트를 참조하십시오, 이들 모두 시도, MySQL은 내 저장된 proc을 대체하지 않는 것 .. 여기 뭔가 잘못 됐어? – user2137982

관련 문제