[英]Using SQL like and % in Perl
当我使用以下代码时,我似乎只从数组中打印最后的结果。 我认为这与我的like子句和%符号有关。 有任何想法吗?
my @keywords = <IN>;
my @number = <IN2>;
foreach my $keywords (@keywords)
{
chomp $keywords;
my $query = "select *
from table1 a, table2 b
where a.offer = b.offer
and a.number not in (@number)
and a.title like ('%$keywords%')";
print $query."\n";
my $sth = $dbh->prepare($query)
or die ("Error: Could not prepare sql statement on $server : $sth\n" .
"Error: $DBI::errstr\n");
$sth->execute
or die ("Error: Could not execute sql statement on $server : $sth\n" .
"Error: $DBI::errstr\n");
while (my @results = $sth->fetchrow_array())
{
print OUT "$results[0]\t$results[1]\t$results[2]\t$results[3]\t",
"$results[4]\t$results[5]\t$results[6]\t$results[7]\t",
"$results[8]\n";
}
}
close (OUT);
我猜测您的IN
文件是在Windows系统上创建的,因此行之间也有CRLF序列(大约为\\r\\n
),但是您正在* nix系统(或Cygwin或其他操作系统)上运行此脚本。 所以这行:
chomp $keywords;
将删除尾随\\n
,但不会删除其后的\\r
。 因此,您在LIKE
表达式中有一个回车符,没有行与之匹配。
如果我的猜测是正确的,则可以通过将上面的行更改为此来解决:
$keywords =~ s/\r?\n?\z//;
从行尾删除所有回车和/或换行符。
(您还应该使用绑定变量而不是将值直接内插到查询中,来进行innaM上面建议的更改。但是该更改与该更改正交。)
显示print $query
的输出,也许我们可以为您提供帮助。 更好的是,显示以下内容的输出:
use Data::Dumper;
$Data::Dumper::Useqq=1;
print Dumper($query);
在此之前,您对“替换和”的评论使我认为您的输入中有回车符,如果有多个,则@number不太可能使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.