繁体   English   中英

在Laravel Carbon中按月执行分组时遇到未找到时区错误

[英]Getting timezone not found error while performing group by month in Laravel Carbon

我正在尝试使用Laravel Eloquent语法运行以下SQL查询(尚不正确,因此未在此处显示)以选择给定日期范围内startdate的出现次数:

SELECT  COUNT(startdate) as TotalCount 
FROM    Users
WHERE   startdate >= '2017-01-01' 
AND     startdate <= '2017-12-31'
AND     startdate IS NOT NULL
GROUP BY Month(startdate)

现在,我知道这可能不正确。 特别是GroupBy是不正确的。 我还不断收到“在数据库中找不到时区”错误。 我该如何纠正错误并执行正确的查询,以便结果类似于以下内容:

January: 1
February: 3
March: 0
April: 9
....

编辑:错误的PHP代码:

 $starters = User::select(DB::raw('Count(*), startdate'))
        ->groupBy(Carbon::parse('startdate')->format('m'))
        ->get();

您可能正在寻找此处记录的MONTHNAME函数... https://dev.mysql.com/doc/refman/5.5/zh-CN/date-and-time-functions.html#function_monthname

对于您的查询,使用起来非常简单。

SELECT  MONTHNAME(startdate) AS `month`, COUNT(*) AS `TotalCount`
FROM    Users
WHERE   startdate >= '2017-01-01' 
AND     startdate <= '2017-12-31'
AND     startdate IS NOT NULL
GROUP BY MONTHNAME(startdate)

您几乎总是想选择要分组的内容,而其余的选择项应该是合计的(如count,sum,avg等)。

不过,您只需要注意一点,因为如果您返回一年以上,它将开始包括两个年份中同一月份的结果,因为您仅按月份分组。 如果那是您想要的,那么显然没关系,但是可能还需要在查询的select和group by中添加YEAR(startdate)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM