Laravel中如何只获取日期不显示时间?
解决方法
要只保留日期部分,你需要修改查询里提取日期和分组依据两个地方——原来的calldate是带时间的datetime类型,直接分组会把同一天不同时间的记录分开,同时返回结果也会带时间。
具体修改步骤(以MySQL为例)
把每个查询中的'calldate as ibdate'替换成DB::raw('DATE(calldate) as ibdate'),同时把groupBy('calldate')替换成groupBy(DB::raw('DATE(calldate)'))。
修改后的完整代码如下:
$data = DB::table('kahanighar_ivr.kahani_cdr') ->select(DB::raw('count(*) as a'),'dst',DB::raw('DATE(calldate) as ibdate'),DB::raw('"kahani" as ser')) ->where('dst','like','%7787%') ->wheredate('calldate','>=',"$request->start") ->wheredate('calldate','<=',"$request->end") ->groupBy('dst')->groupBy(DB::raw('DATE(calldate)')) ->union(DB::table('kids_ivr.kids_cdr') ->select(DB::raw('count(*) as a'),'dst',DB::raw('DATE(calldate) as ibdate'),DB::raw('"kids" as ser')) ->where('dst','like','%7787%') ->wheredate('calldate','>=',"$request->start") ->wheredate('calldate','<=',"$request->end") ->groupBy('dst')->groupBy(DB::raw('DATE(calldate)'))) ->union(DB::table('news_ivr.news_cdr') ->select(DB::raw('count(*) as a'),'dst',DB::raw('DATE(calldate) as ibdate'),DB::raw('"news" as ser')) ->where('dst','like','%7787%') ->wheredate('calldate','>=',"$request->start") ->wheredate('calldate','<=',"$request->end") ->groupBy('dst')->groupBy(DB::raw('DATE(calldate)')));
其他数据库适配
如果用的是PostgreSQL,把DATE(calldate)换成DATE_TRUNC('day', calldate)或者TO_CHAR(calldate, 'YYYY-MM-DD');SQL Server的话用CAST(calldate AS DATE)。
额外说明
DATE()函数会把datetime类型转换成YYYY-MM-DD格式的日期字符串,正好满足只保留日期的需求。- 分组依据必须同步改成日期,不然同一天不同时间的记录会被拆成多个分组,统计结果会不准确。
内容的提问来源于stack exchange,提问作者ayesha maqsood
相关产品推荐
相关产品推荐

