我有一个查询,查询日期范围在“ 01-01-2019”和“ 03-02-2019”之间,并且在我更改日期范围的day(02)如“ 01-01-2019”和“ 02-02-2019”,则查询无法正常工作。
我有一个查询,日期范围从'01 -01-2019'到To:'03 -02-2019',如
SELECT * FROM `customer_info` WHERE `rec_date` between '01-01-2019' and '03-02-2019'
因此它可以正常工作,但是当我更改日期范围的日期,例如从'01 -01-2019'和至:'02 -02-2019'时,查询是
SELECT * FROM `customer_info` WHERE `rec_date` between '01-01-2019' and '02-02-2019'
但是查询无法正常工作。
我想从此查询中更改日期TO的日期范围为'02 -02-2019'后获取记录。请告诉我解决方案为什么它不获取记录。
答案 0 :(得分:0)
该rec_date可能是VARCHAR或CHAR类型,而不是DATE类型。
然后应先将其转换为DATE类型,再从中获取范围。
否则,BETWEEN将按字母顺序比较字符串。
然后您查询日期范围时,请使用'YYYY-MM-DD'格式获取日期常量。
这不会导致几个月和几天的混乱。
(是“ 01-04-2019”是4月1日还是1月4日?)
SELECT *
FROM `customer_info`
WHERE STR_TO_DATE(rec_date,'%m-%d-%Y') BETWEEN '2019-01-01' and '2019-03-02'
答案 1 :(得分:0)
仅包含日期: MySQL日期格式是:YYYY-MM-DD。可以简单地将其查询为
select * from customer_info where rec_date between '2019-01-01' and '2019-02-02'
OR
select * from customer_info where rec_date between >= '2019-01-01' and '2019-02-02'
带有日期和时间: 只需使用MySQL处理日期YYYY-MM-DD HH:MM:SS的格式,并将查询设置为
select * from customer_info where rec_date >= '2019-01-01' and rec_date <= '2019-02-02'
特别是因为MySQL现在支持亚秒级的时间精度。使用23:59:59比一天结束时短了整整一秒钟。其中rec_date> ='2019-01-01'和rec_date <='2019-02-02'是定义日期范围的最精确方法,适用于从日期到亚秒级单位的任何时间精度。 / p>
OR
就这么简单。
select * from customer_info where rec_date between '2019-01-01 00:00:00' and '2019-02-02 23:59:00'