本番環境では MySQL データベースを使用し、テストの実行には SQLite データベースを使用しています。私のアプリケーションの一部は、1 年間の月次統計を収集するために使用されます。これは成功しましたが、データのクエリを実行するときに MySQL 固有の関数を使用しているため、テストを自動化できないという犠牲が伴いました。
my $criteria = {
status => ['Complete'],
'YEAR(completed_on)' => DateTime->now()->year(),
};
my $attributes = {
select => [ { count => 'title' }, 'completed_on' ],
as => [qw/num_completed datetime/],
group_by => [qw/MONTH(completed_on)/],
};
YEAR
およびMONTH
MySQL 関数を使用していることに注意してください。
where 句を代用して、MySQLs 関数の使用をなくす 1 つの方法を知っています。たとえばYEAR
、次のようになります。
my $dtf = $schema->storage->datetime_parser;
my $begin_date = DateTime->from_day_of_year( year => DateTime->now()->year(), day_of_year => 1 ); #inception o_O
my $end_date = DateTime->from_day_of_year( year => DateTime->now()->year(), day_of_year => 36[56] );
my $criteria = {
status => ['Complete'],
completed_on =>
-between => [
$dtf->format_datetime($begin_date),
$dtf->format_datetime($end_date),
]
};
DBIC を使用して日付フィールドを照会するための推奨される方法を使用する
group_by
しかし、この句をどうするか、このフィールドの日付値を月ごとにグループ化する方法については困惑しています。誰かに何かアイデアがあるかどうか疑問に思っていますか?
ありがとう!