2012-11-01 36 views
0

我有一个数据文本文件,我将其导入到MySQL数据库中。一些不幸的行包含引号,这会导致我的SQL查询失控。我想摆脱任何带有引号的字段,或者至少在我的查询中忽略它们。用sql语句替换perl脚本中的引号

我发现了一些可能的工作,但因为这是通过一个Perl脚本运行我有问题“转义”的引号。我真的不知道如何也弄不清楚。我想只通过我的表中搜索并删除任何引号(“),它可能会发现或用单引号或空间或任何真正取代它。

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

任何人有什么想法?

谢谢!

+1

请问编辑'我的$ replacequery'到'$ myreplacequery'吗? –

+0

你可以发布一个代码示例,这将是“haywire”? – RobEarl

+0

我无法得到这个工作,所以我决定只使用perl来查找/替换我输入到表中的文件中的引号,甚至在它到达SQL之前。希望这会起作用,不能分辨。 – user1026801

回答

1

Perl有qqqquote-like operators)对于这种情况,他们让你选择使用引号字符。q的作用就像一个单引号(')和不进行内插(扩展变量)而qq像双引号(")那样行事。

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

更改查询来更新这个表:

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

你真的想通过由一个单引号来REPLACE其第三个参数字符串,但你传递一个空字符串。必要的SQL是:

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

要创建的Perl字符串,你可以使用下列字符串字面量:

"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