相应的Perl DBIx :: Class for SQL LIKE和NOT LIKE STATEMENT

时间:2017-08-22 08:39:59

标签: perl dbix-class

我只是Perl的新手,我正在尝试使用Perl DBIx :: Class ORM。我想转换一个有时像

的SQL语句
SELECT `COLUMN_1` FROM TABLE 
    WHERE `COLUMN_NAME` LIKE "regex1" 
    AND `COLUMN_NAME` NOT LIKE` "regex2".

我知道添加条件的search_where语句,但我找不到LIKE和NOT LIKE的等价物?

1 个答案:

答案 0 :(得分:2)

search_like只是一个方便的捷径。你可能不想使用它。

但有几种方法可以通过search实现此目的。请记住,ResultSetsearch的调用可以链接,以构建最终的ResultSet。

$rs->search(
    {
        column_name => { -like => 'foo' },
    }
)->search(
    {
        column_name => { -not_like => 'bar' },
    }
);

或者,您也可以将它们组合起来,如in this older mailing list post所示。

$rs->search( 
    { 
        column_name => { 
            -like     => 'foo', 
            -not_like => 'bar', 
        } 
    }
); 

或者你可以使用AND链接它们,这更加详细。

$rs->search(
    {
        -and => [
            { column_name => { -like     => 'foo' } },
            { column_name => { -not_like => 'bar' } },
        ]
    }
);

所有这些都做同样的事情。

您可以在SQL::Abstract中找到有关此语法的其他信息,这些信息由DBIx :: Class使用。

请注意LIKE 采用正则表达式。