drop table if exists `test`; create table `test`( `create_time` datetime ); insert into `test` values('2018-11-22 14:14:34'); insert into `test` values('2018-11-22 14:14:49'); insert into `test` values('2018-11-22 14:18:40'); insert into `test` values('2018-11-22 14:30:31'); insert into `test` values('2018-11-22 14:32:57'); insert into `test` values('2018-11-23 14:54:36'); insert into `test` values('2018-11-24 16:27:15'); -- #以上为测试数据 -- select * from test where create_time between date('2018-11-22 18:17:33') and DATE_ADD('2018-12-19 18:17:33',INTERVAL 1 DAY) ; 一般来说, 不应该在 where 后的字段上加任何函数, 这样会影响查询效率。 where date(create_time) 的做法是错误的。要包装, 只能包装后面的常量部分。
create table `test`(
`create_time` datetime
);
insert into `test` values('2018-11-22 14:14:34');
insert into `test` values('2018-11-22 14:14:49');
insert into `test` values('2018-11-22 14:18:40');
insert into `test` values('2018-11-22 14:30:31');
insert into `test` values('2018-11-22 14:32:57');
insert into `test` values('2018-11-23 14:54:36');
insert into `test` values('2018-11-24 16:27:15');
-- #以上为测试数据 --
select * from test
where create_time between
date('2018-11-22 18:17:33')
and
DATE_ADD('2018-12-19 18:17:33',INTERVAL 1 DAY)
;
一般来说, 不应该在 where 后的字段上加任何函数, 这样会影响查询效率。
where date(create_time) 的做法是错误的。要包装, 只能包装后面的常量部分。
但 date(create_time) 会使索引失效。
STR_TO_DATE('2018-01-02 03:04:05','%Y-%m-%d %H:%i:%s')