繁体   English   中英

在Perl中使用SQL like和%

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM