select 中使用 FROM_UNIXTIME (create_time,'%Y-%m'') 无法查出时间问题

DB::table('billing_details')
->select(
DB::raw("SUM(amount) as sum_amount"),
DB::raw("FROM_UNIXTIME(create_time,'%Y-%m')"))
->groupBy("FROM_UNIXTIME(create_time,'%Y-%m')")
->get();
这样使用 报vsprintf(): Too few arguments错误

DB::table('billing_details')
->select(
DB::raw("SUM(amount) as sum_amount"),
DB::raw("FROM_UNIXTIME(create_time,'%%Y-%%m')"))
->groupBy("FROM_UNIXTIME(create_time,'%%Y-%%m')")
->get();
多加个%号,查询结果为
file
求助~!

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

既然沉了,
那只能自己改框架源码了- -!

5年前 评论

@LEter
之前也出现过你说的以上问题,特别是vsprintf(): Too few arguments错误,后来发现是自己写的打印sql日志代码的问题


\DB::listen(function ($query) {
                $tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
                $qBindings = [];
                foreach ($query->bindings as $key => $value) {
                    if (is_numeric($key)) {
                        $qBindings[] = $value;
                    } else {
                        $tmp = str_replace(':'.$key, '"'.$value.'"', $tmp);
                    }
                }
                $tmp = vsprintf($tmp, $qBindings);
                $tmp = str_replace("\\", "", $tmp);
                \Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t");
            });

注释掉上面的代码之后,下面的代码完美执行,这个是我的统计用户月账单(月份,充值金额,使用金额,月结余)


$bills = Bill::where('user_id', $user->id)
                    ->select(DB::raw('group_concat(balance order by `id` desc) as balance'), DB::raw('date_format(created_at,\'%Y-%m\') as date'), DB::raw('SUM(case when type="'.Bill::TYPE_BIHU.'" then amount else 0 end) as consumption_amount'), DB::raw('SUM(case when type="'.Bill::TYPE_RECHARGE.'" then amount else 0 end) as recharge_amount'))
                    ->groupBy(DB::raw('date_format(created_at,\'%Y-%m\')'))
                    ->orderBy('id', 'desc')
                    ->paginate(10);

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!