在perl脚本中替换sql查询中的引号

时间:2012-11-01 07:28:30

标签: mysql sql perl dbi

我有一个数据文本文件,我将其导入MySQL数据库。 unfortunatley中的一些行包含引号,这会导致我的SQL查询变得混乱。我想摆脱任何带引号的字段,或者至少在我的查询中忽略它们。

我发现了一些可能有用的东西,但是因为这是通过Perl脚本运行的,我遇到了“转义”引号的问题。我真的不知道怎么也想不通。我想只搜索我的表格并删除它可能找到的任何引号(“)或用一个引号或空格或任何其他内容替换它。

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

有人有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

对于这种情况,Perl有qqqquote-like operators)。它们允许您选择要使用的引号字符。 q的行为类似于单引号('),并且不插入(展开变量),而qq的作用类似于双引号(")并且确实如此。

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

答案 1 :(得分:1)

在此表上将查询更改为UPDATE:

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

答案 2 :(得分:0)

您实际上想要将包含单引号的字符串传递给REPLACE作为其第3个arg,但是您传递的是一个空字符串。必要的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