【问题标题】:Using datediff from 2 joined tables使用 2 个连接表中的 datediff
【发布时间】:2016-12-09 15:37:42
【问题描述】:

我想知道两张桌子上两个日期之间的差异。 uploads.published_at 与 completed_guides.created_at 相比

我不断收到一条错误消息:

SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'datediff' (SQL: select users.*,completed_guides.created_at as completed_at,uploads.published_at,datediff(HOUR, published_at, completed_at) from `users` inner join `uploads` on `users`.`id` = `uploads`.`user_id` inner join `completed_guides` on `uploads`.`id` = `completed_guides`.`upload_id` where `completed_guides`.`upload_id` = 2839 limit 10)

这是我的代码。任何帮助将不胜感激。

$select = [
    'users.*',
    'completed_guides.created_at as completed_at',
    'uploads.published_at',
    'datediff(HOUR, published_at, completed_at) as date_diff'
];

return User::select(DB::raw(join(',', $select)))
    ->join('uploads', 'users.id', '=', 'uploads.user_id')
    ->join('completed_guides', 'uploads.id', '=', 'completed_guides.upload_id')
    ->where('completed_guides.upload_id', $this->id)
    ->take(10)
    ->get();

【问题讨论】:

    标签: php sql laravel date


    【解决方案1】:

    你可以像这样使用 Laravel Query Builder 的 whereRaw()

    return User::select(DB::raw(join(',', $select)))
                ->join('uploads', 'users.id', '=', 'uploads.user_id')
                ->join('completed_guides', 'uploads.id', '=', 'completed_guides.upload_id')
                ->where('completed_guides.upload_id', $this->id)
                ->whereRaw('datediff(uploads.published_at, completed_guides.completed_at) as date_diff')
                ->take(10)
                ->get();
    

    要设置日期格式,您可以使用 SQL 方法 - date_format(date, format),如下所示:

    ->select(DB::raw("DATE_FORMAT(date_diff, '%b %d %Y %h:%i %p') as formatted_date_diff"));
    

    查看更多关于SQL Date Format

    希望这会有所帮助!

    【讨论】:

    • 设法让它工作,需要删除HOUR 参数。现在返回 0 和 0 天差一样,是否可以返回 Y-m-d H:i 格式?
    • 你可以使用sql的DATE_FORMAT(date,format)方法,试试这个。我已经从我的回答中删除了 HOUR 参数!
    • @BenShepherd - 我已经更新了我的答案,请看一下!
    【解决方案2】:

    有单位的那个是timestampdiff,不是datediff。

    timestampdiff(HOUR, published_at, completed_at) as date_diff
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 2015-12-28
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多