针对mysql datetime函数的DBIx :: Class测试

时间:2012-08-14 20:56:34

标签: mysql perl datetime catalyst dbix-class

我正在使用DBIx::Class,我想根据插入的一年中的哪一天选择行。以下是我的询问:

$rows = $c->model("DB::Test")->search(
{
    "DAYOFYEAR(entry_time)"=>$day_of_year,
});

但是这不起作用,因为DBIx :: Class将DAYOFYEAR(entry_time)视为一列。无论如何我可以让它使用这个价值吗?我知道有时会使它成为一个标量,如\'DAYOFYEAR(entry_time)'将适用于某些情况,但我已经尝试过,但它不起作用。有谁知道我可以做到这一点的方式?谢谢!

1 个答案:

答案 0 :(得分:3)

使用\'DAYOFYEAR(entry_time)'是正确的方法,也是FAQ的一部分。

  

[我如何] ..使用左侧的SQL函数进行搜索?

     

要在比较的左侧使用SQL函数,您当前需要求助于文字SQL:

->search( \[ 'YEAR(date_of_birth) = ?', [ plain_value => 1979 ] ] );
  

注意:plain_value部分中的[ plain_value => 1979 ]字符串应该与列的名称相同(如果函数的返回值的类型与类型相同,请执行此操作(例如,列)或者在函数的情况下,它当前被视为虚拟字符串(使用plain_value或类似的东西来传达意图是个好主意)。当前处理特殊列类型(BLOB,数组等)时,该值才有意义,但将来可能会发生变化。