0

我有一个要导入 MySQL 数据库的数据文本文件。不幸的是,有些行包含引号,这导致我的 SQL 查询变得混乱。我想去掉任何有引号的字段,或者至少在我的查询中忽略它们。

我发现了一些可能有效的方法,但是由于这是通过 Perl 脚本运行的,所以我遇到了“转义”引号的问题。我真的不知道怎么弄也弄不明白。我只想搜索我的表并删除它可能找到的任何引号 (") 或用单引号或空格或其他任何东西替换它。

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

有人有想法么?

谢谢!

4

3 回答 3

1

对于这种情况,Perl 有qand qq类似引号的操作符)。它们允许您选择要使用的引号字符。q作用类似于单引号 ( ') 并且不插入(扩展变量),而qq作用类似于双引号 ( ") 并且可以。

my $replacequery = q{REPLACE(s.Title, '"','')};
于 2012-11-01T07:35:04.870 回答
1

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

 update tablename set title = REPLACE(title,'\"','\'') where title like '%\"%'
于 2012-11-01T07:44:44.167 回答
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
于 2012-11-01T08:18:35.900 回答