MySQL 如何从 datetime 类型的字段选择 date

有个字段created_at是 datetime 类型,如何选择特定日期的数据?

SELECT * FROM data WHERE created_at = '2017-06-29';
SELECT * FROM data WHERE created_at BETWEEN '2017-06-29 00:00:00' AND '2017-06-29 23:59:59';

都不对,结果集都是空的

阅读 7.4k
6 个回答

datetime默认格式'2017-06-29 00:00:00' 如果你的数据这一天确实有数据的话第二条是会有结果的,所以首先你要看一下是不是表中有这一天的数据并且你的数据格式是什么样的

PS:取某一天的数据可以created_at like 'yyyy-mm-dd%'或者就是你第二种写法,date(created_at)、left(created_at)也可以取到当天的日期,但是都不会走索引,效率很差

我的可以,可能是你的表或者字段错了,或者确实没有结果。。条件是没问题的
图片描述

select * from data d WHERE d.created_at >= curdate()
and d.created_at < DATE_ADD(STR_TO_DATE(curdate(), '%Y-%m-%d'), INTERVAL 1 DAY);

意思就是查询大于等于今天零时小于明天零时的时间

第一行不对, 因为datetime和你条件里面的格式不一样.

第二行是对的.
结果也是对的, 因为确实没数据.

新手上路,请多包涵

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题