我正在尝试从数据类型为 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
答案 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 Baker 的答案的'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吗?