0

本番環境では 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およびMONTHMySQL 関数を使用していることに注意してください。

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しかし、この句をどうするか、このフィールドの日付値を月ごとにグループ化する方法については困惑しています。誰かに何かアイデアがあるかどうか疑問に思っていますか?

ありがとう!

4

1 に答える 1