我正在尝试从数据类型为 varchar 的表中获取数据,但我需要它按日期使用 where 子句选择过去 2 天。
在这里,我已从此链接尝试:
$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
<</p>
首先创建一个日期变量以根据数据库列进行比较"created_at"="06-02-2019 23:00"
$compare = date('d-m-Y G:i', strtotime('-2 days'));
然后更改 where 子句,如下所示。
->where('created_at >=',$compare);
根据您的评论,@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
在这里,我是两个日期之间的日期范围。
我已经通过将created_at
转换为日期来解决,然后按照 Viren Panchal 的建议将其与$compare进行比较,但将日期格式从"d-m-Y"更改为"Y-m-d",因为马克贝克在比较日期中的答案不起作用也通过使用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?