我在生产中使用 MySQL 数据库,并在运行测试时使用 SQLite 数据库。我的应用程序的一部分用于收集一年的每月统计数据。我已经成功地做到了这一点,但是它的代价是无法自动化测试,因为我在查询数据时使用了 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 子句来消除 MySQLYEAR
函数的使用,如下所示:
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),
]
};
但是我对如何处理该group_by
子句以及如何使这个字段日期值按月数据库不可知的分组感到困惑。想知道是否有人有任何想法?
谢谢!