mysql查询时间问题,两个相同的sql查询出来的结果不同,这两个sql有什么区别呀

SELECT COUNT(DISTINCT ca_user_id) from order_info_ref where order_time>='2015-01-01' and order_time <='2015-01-04';

SELECT COUNT(DISTINCT ca_user_id) from order_info_ref where DATE_FORMAT(order_time,'%Y-%m-%d')>='2015-01-01'
and DATE_FORMAT(order_time,'%Y-%m-%d')<='2015-01-04' ;

数据库有两百多万条数据,通过第一种方式查询 返回的结果有三十多万条数据,通过第二种方式查询返回的接口有四十多万条数据,不知道是什么原因!

区别在于
order_time <='2015-01-04'; 所有时间超过2015-01-04是不符合查询区间


DATE_FORMAT(order_time,'%Y-%m-%d')<='2015-01-04' ;恰恰相反

刚好隔了2015-01-04这一天的数据

第一个查询存在日期隐式转字符串的问题,第二个查询则不存在.
第二个查询一定会把2015-01-04 00:00:00到2015-01-04 23:59:59的数据带出来.
而第一个就不一定了,如果隐式转换后的字符串是带时分秒的,前面相同就会比较长度,这样一来,2015-01-04 00:00:00到2015-01-04 23:59:59的数据其实就被过滤掉了,因为这部分字符串和2015-01-04比较,都大于后者