如何按日期获取最后的记录,但数据类型为varchar

时间:2019-02-06 16:00:51

标签: php mysql codeigniter strtotime

我正在尝试从数据类型为 varchar 的表中获取数据,但是我需要它使用date子句选择过去2天。

我在this link中尝试过:

$query = $this
    ->db
    ->select('*, COUNT(*) as cnt')
    ->where('STR_TO_DATE(created_at,"%d-%m-%Y") >=', '(CURDATE() - INTERVAL 2 DAY)')
    ->group_by('client')
    ->order_by('cnt', 'DESC')
    ->get('histprob');

但是结果显示了我表上的所有数据,而不是仅仅过去了两天。 我的列created_at如下所示:06-02-2019 23:00

3 个答案:

答案 0 :(得分:1)

首先创建一个日期变量,以根据您的数据库列"created_at"="06-02-2019 23:00"

进行比较
$compare = date('d-m-Y G:i', strtotime('-2 days'));

然后在where子句中进行如下更改。

->where('created_at >=',$compare);

答案 1 :(得分:1)

根据您的评论,@ Viren answe不在不同月份工作,因此您也可以这样尝试:

$currentDate = date('d-m-Y G:i');
$twoDaysOld = date('d-m-Y G:i', strtotime('-2 days'));

->where('created_at >=',$twoDaysOld); // greator equal to old date
->where('created_at <=',$currentDate); // less then and equal to current date

这里我是两个日期之间的日期范围。

答案 2 :(得分:0)

我解决了通过将created_at转换为日期,然后按照 Viren Panchal 的建议将其与 $ compare 进行比较,但是将日期格式从“ dmY”更改为compare dates not working中作为 Mark Ba​​ker 的答案的'Ymd'也通过使用STR_TO_DATE转换了created_at。然后是我的完整代码:

$date7 = date('Y-m-d', strtotime('-7 days'));
$query = $this->db->select('*, COUNT(*) as cnt')->where('STR_TO_DATE(created_at,"%d-%m-%Y") >=', $date7)->group_by('client')->order_by('cnt', 'DESC')->get('histprob');

那么,比较日期应该使用Y m d吗?