【问题标题】:Corresponding Perl DBIx::Class for SQL LIKE AND NOT LIKE STATEMENTSQL LIKE AND NOT LIKE STATEMENT 对应的 Perl DBIx::Class
【发布时间】:2017-08-22 17:02:09
【问题描述】:

我只是 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 的等价物?

【问题讨论】:

  • 抱歉,不完整的信息是 DBIx::Class

标签: perl dbix-class


【解决方案1】:

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采用正则表达式。

【讨论】:

  • 嗨,谢谢你的帮助,顺便说一句,正则表达式有什么解决方法,因为在 SQL LIKE 语句中我使用的是字符串正则表达式谢谢
  • @Always_Beginner 您使用的是哪个数据库引擎? LIKE 实际上不应该支持正则表达式。一些数据库有一个REGEXP 运算符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2021-05-04
相关资源
最近更新 更多