【发布时间】:2022-01-02 06:08:21
【问题描述】:
我正在尝试将“CHECKTIME”表列日期时间转换为字符串,以便在 sql 中使用“LIKE”运算符。 LIKE 运算符不支持 dateaime 数据类型。因此,我必须将其转换为字符串才能使用 LIKE。我怎样才能在laravel eloquent中做到这一点?我在控制器中的代码:
$dailyData=CheckInOutModel::join('USERINFO', 'USERINFO.USERID', '=', 'CHECKINOUT.USERID')
->select('USERINFO.USERID as id','USERINFO.BADGENUMBER as bd', 'USERINFO.NAME as name','USERINFO.Image as photo','CHECKINOUT.*')
->where(CONVERT(VARCHAR(25),' CHECKINOUT.CHECKTIME'),'LIKE',$thisDay.'%')
->orderBy('CHECKINOUT.CHECKTIME','desc')->get();
用于返回数据的 SQL 查询:
SELECT CHECKINOUT.CHECKTIME
FROM CHECKINOUT
JOIN USERINFO ON USERINFO.USERID=CHECKINOUT.USERID
WHERE CONVERT(VARCHAR(25), CHECKINOUT.CHECKTIME, 126) LIKE '2021-11-23%';
【问题讨论】:
-
工作查询中的
126是什么?据我所知,CONVERT只需要 2 个参数。无论如何,您可能需要拨打whereRaw才能获得等价物。 -
@PaulT。 126 是错误的。但我对原始查询没有任何问题。我只需要在我雄辩的查询中将 CHECKINOUT.CHECKTIME 转换为字符串。
-
试用:
->whereRaw('CONVERT(VARCHAR(25), CHECKINOUT.CHECKTIME) LIKE ?', $thisDay.'%') -
所以您想查找特定日期的记录?
-
您不想将数据库日期转换为字符串然后查询。您只想查询日期:
where('checktime', '>=', $thisDay)->where('checktime', '<', date('Y-m-d', strtotime($thisDay.' +1 day')))
标签: sql laravel eloquent sql-like