0

列がエポック秒でファイル mtimes を格納する SQLite データベースにテーブルがあります。

特定の月に変更されたテーブル ファイルを検索したいと思いますか?

生の 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 で方法があるかどうかを理解しようとしましたが、見つかりませんでした。

ありがとう

シモーネ

4

2 に答える 2

5

探している構文は次のとおりです。

$m->search(
  \[ q{strftime('%Y-%m', mtime, "unixepoch") = ?}, "2009-08" ]
);

はい、それはarray- ref -refです。最初の要素はプレースホルダーの使用が許可されているリテラル SQL で?、残りの要素はそれらのプレースホルダーにバインドする値です。クエリが実行されます。

arrayrefref は有効なハッシュ キーではないため、これらのいずれかを他の条件と組み合わせる必要がある場合は、次の-and構文を使用する必要があります。

$m->search({ 
  -and => [
    foo => 'bar',
    \[ q{ SQL }, $bind ],
  ],
});

これは、この構造の SQL::Abstract ドキュメントのセクションです

于 2011-04-10T16:52:41.557 に答える
0

search_literal代わりに次を使用することをお勧めします。

# assuming $m isa DBIx::Class::ResultSet
$m->search_literal('strftime("%Y%m", mtime, "unixepoch") = ?', '200908');

編集:私は訂正しました。@hobbs のコメントと回答を参照してください。

于 2011-04-10T15:40:03.940 に答える