我在SQLite数据库中有一个表,其中一列以epoch秒存储文件mtimes。
我现在想搜索在某个月内修改过的表格文件?
在原始SQL中我会这样做:
select * from my_table where strftime('%Y-%m', mtime, "unixepoch") = "2009-08"
有没有办法通过DBIx :: Class有效地做到这一点?是否可以
$m->search({ \'strftime('%Y-%m', mtime, "unixepoch")' => "2009-08" })
我尝试了解DBIx :: Class :: InflateColumn :: DateTime是否有办法,但我找不到它。
由于
西蒙
答案 0 :(得分:5)
您正在寻找的语法是:
$m->search(
\[ q{strftime('%Y-%m', mtime, "unixepoch") = ?}, "2009-08" ]
);
是的,这是一个数组 - ref -ref。第一个元素是文字SQL,允许使用?
占位符,其余元素是绑定到这些占位符的值,DBIC将确保在内部对所有内容进行重新排序,以便将这些值放入正确的位置。查询运行时的绑定列表。
如果您需要将其中一个与其他条件结合使用,因为arrayrefref不是有效的哈希键,您需要使用-and
语法:
$m->search({
-and => [
foo => 'bar',
\[ q{ SQL }, $bind ],
],
});
答案 1 :(得分:0)
我建议你改用search_literal
:
# assuming $m isa DBIx::Class::ResultSet
$m->search_literal('strftime("%Y%m", mtime, "unixepoch") = ?', '200908');
编辑:我有所纠正。请参阅@hobbs的评论和回答。