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

How to get last record by date but a datatype varchar

我正在尝试从数据类型为 varchar 的 table 中获取数据,但我需要它 select 最近 2 天使用 where 子句 by日期。

这里我试过 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');

但结果显示的是我 table 上的所有数据,而不是仅过去了两天。 我的专栏 created_at 显示为:06-02-2019 23:00

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

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

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

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

我通过将 created_at 转换为日期来解决,然后按照 Viren Panchal 的建议将其与 $compare 进行比较,但改变了日期格式从 'd-m-Y' 到 'Y-m-d' 作为 Mark Ba​​kercompare dates not working 中的回答也通过使用 [=26= 转换了 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吗?

根据您的评论,@Viren 的回答不适用于不同的月份,因此您也可以这样尝试:

$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

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