【问题标题】:How to extract the Day, Month and Year from the date?如何从日期中提取日、月和年?
【发布时间】:2020-04-29 18:03:29
【问题描述】:

我只是不知道如何从日期中获取日期、月份和年份。

这里是雄辩的

 public function query(Detail $model)
    {
    return $model->newQuery()->leftjoin('fishers','fishers.id', '=','details.fisher_id')
    ->leftjoin('species','species.id', '=', 'details.species_id')
    ->leftjoin('purposes','purposes.id', '=', 'details.purpose_id')
    ->leftjoin('islands','islands.id', '=', 'fishers.island_id')
    ->leftjoin('preservations','preservations.id', '=', 'details.preservation_id')   
    ->select('fishers.*','details.*','details.indate','islands.island_name','fishers.fisher_first_name','fishers.fisher_last_name','details.weight','species.species_name','purposes.purpose_name','preservations.preservation_name');
   }

我尝试使用Month(details.indate) as Month, Year(details.indate) as Year,但似乎不起作用。我使用日期作为indate 的数据类型,当我使用Month(details.indate) as Month 时,我收到此错误:

SQLSTATE[42S22]: COLUMN NOT FOUND: 1054 UNKNOWN COLUMN 'Month(details.indate)' IN 'field list' (SQL: SELECT fishers.* , details.* , MONTH(details.indate) AS MONTH

这是我的数据表列

   protected function getColumns()
    {
        return [
            [ 'data' => 'purpose_name', 'name' => 'purposes.purpose_name', 'title' => 'Purpose' ],
            [ 'data' => 'fisher_first_name', 'name' => 'fishers.fisher_first_name', 'title' => 'Fisher Name' ],
            [ 'data' => 'preservation_name', 'name' => 'preservations.preservation_name', 'title' => 'Preservation Methods' ],
            [ 'data' => 'species_name', 'name' => 'species.species_name', 'title' => 'Species Name' ],
            [ 'data' => 'island_name', 'name' => 'islands.island_name', 'title' => 'Island Name' ],
            [ 'data' => 'weight', 'name' => 'details.weight', 'title' => 'Weight' ],
            [ 'data' => 'indate', 'name' => 'details.indate', 'title' => 'Month' ],
            [ 'data' => 'indate', 'name' => 'details.indate', 'title' => 'Year' ],

        ];
    }

有人可以帮我怎么做吗?

【问题讨论】:

  • details.indate 的数据类型是什么?还有当你做Month(details.indate) as Month, Year(details.indate) as Year时它返回了什么?
  • 我使用日期作为 indate 的数据类型,当我将 Month(details.indate) 设置为 Month 时,我收到此错误 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Month(details.indate) )' in 'field list' (SQL: select fishers.*, details.*, Month(details.indate) as Month,
  • 如果不使用MONTH() 或YEAR(),查询是否有效?
  • 是的,正确
  • 仅供参考,您使用的是query builder,而不是Eloquent。如果您想在查询中使用 MONTH() 等 MySQL 函数,则需要使用 raw methods。

标签: mysql sql laravel


【解决方案1】:

您需要使用 DB::raw 函数来使用 Laravel Eloquent 选择表达式。

例如:

return $model->newQuery()->...
->select(DB::raw('Month(details.indate) as Month'), DB::raw('Year(details.indate) as Year'), 'fishers.*','details.*', ...)

请务必在文件顶部添加use DB;。

【讨论】:

  • 这真的很好,而且工作得很好,谢谢。我所要做的就是让它们反映在我的数据表中,如下所示 ['data' => 'Month', 'name' => 'details.indate', 'title' => 'Month' ], ['data' = > '年份', '名称' => 'details.indate', 'title' => '年份' ],
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2015-01-12
  • 2021-04-02
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多