我有一个数据文本文件,我将其导入MySQL数据库。 unfortunatley中的一些行包含引号,这会导致我的SQL查询变得混乱。我想摆脱任何带引号的字段,或者至少在我的查询中忽略它们。
我发现了一些可能有用的东西,但是因为这是通过Perl脚本运行的,我遇到了“转义”引号的问题。我真的不知道怎么也想不通。我想只搜索我的表格并删除它可能找到的任何引号(“)或用一个引号或空格或任何其他内容替换它。
my $myreplacequery = "REPLACE(s.Title, '"','')";
$sth = $dbh->prepare($myreplacequery);
$sth->execute;
有人有什么想法吗?
谢谢!
答案 0 :(得分:1)
对于这种情况,Perl有q
和qq
(quote-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