2012-11-01 3 views
0

MySQL 데이터베이스로 가져올 텍스트 파일이 있습니다. unfortunatley의 일부 줄에는 따옴표가 포함되어있어 SQL 쿼리가 엉망이 될 수 있습니다. 따옴표가있는 필드를 없애거나 적어도 쿼리에서 필드를 무시하고 싶습니다.펄 스크립트의 sql 쿼리에서 인용 부호 바꾸기

뭔가 효과가있을 수 있지만 Perl 스크립트를 통해 실행되는 것으로 인해 인용 부호가 "이스케이프 처리"되는 문제가 있습니다. 나는 정말로 어떻게 그것을 모르는지 알 수 없다. 난 그냥 찾거나 작은 따옴표 또는 공간이나 정말 아무것도로 대체 수있는 인용 부호 (") 내 테이블을 통해 검색하고 삭제하고 싶습니다.

my $myreplacequery = "REPLACE(s.Title, '"','')"; 
$sth = $dbh->prepare($myreplacequery); 
$sth->execute; 

누구나 어떤 아이디어가?

감사합니다!

+1

'my $ replacequery'를'$ myreplacequery'로 편집 할 수 있습니까? –

+0

"haywire"가 될 코드 샘플을 게시 할 수 있습니까? – RobEarl

+0

필자는이 작업을 할 수 없으므로 필자는 perl을 사용하여 파일에있는 인용문을 찾기/바꾸기로 결정하여 원래 SQL에 도착하기 전에 원래 테이블에 입력하고 있습니다. 바라기를 이것은 잘 될 것이고 아직 말할 수는 없다. – user1026801

답변

1

펄. 이런 상황에 대해. 그들은 당신이 사용하는 인용 문자를 선택할 수 있도록 작은 따옴표 (') 같은 q 행위를 qqq (quote-like operators)을 가지고 있으며, (변수를 확장 보간하지 않습니다) 동안 qq은 큰 따옴표 (")처럼 작동하며 않습니다.

update tablename set title = REPLACE(title,'\"','\'') where title like '%\"%' 
1

변경 쿼리는이 테이블에 업데이트합니다. 필요한 SQL은 다음과 같습니다

REPLACE(s.Title, '"', '\'') 

, 당신은 다음과 같은 문자열 리터럴 중 하나를 사용할 수있는 펄에서 해당 문자열을 만들려면 :

"REPLACE(s.Title, '\"', '\\'')" # Produces: REPLACE(s.Title, '"', '\'') 

qq{REPLACE(s.Title, '"', '\\'')} # Produces: REPLACE(s.Title, '"', '\'') 

필요한 방법 "주의가

를 탈출 할 수 있습니다. 그것없이 Perl은 다음과 같은 문자열 리터럴 (정크가 뒤따라 오는)을 보게됩니다 :

"REPLACE(s.Title, '" 
^    ^
|     | 
start    end 
of string   of string 
literal   literal 
0

당신은 실제로는 제 3 인수에 대한 REPLACE에 작은 따옴표로 구성된 문자열을 전달하고 싶은,하지만 당신은 빈 문자열을 전달하는 :

my $replacequery = q{REPLACE(s.Title, '"','')};