[英]Get results order by date in MySQL if date field's datatype is varchar
[英]How to get last record by date but a datatype varchar
我正在尝试从数据类型为varchar的表中获取数据,但是我需要它使用date来选择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
首先,根据您的数据库列"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
转换为date并将其与Viren Panchal建议的$ compare进行比较 ,但将日期格式从'dmY'更改为'Ymd'的问题,因为Mark Baker在比较日期中的答案不起作用,也通过使用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 md吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.