查询日期范围'01 -01-2019'和'02 -02-2019'不起作用

时间:2019-02-06 08:36:16

标签: mysql

我有一个查询,查询日期范围在“ 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'后获取记录。请告诉我解决方案为什么它不获取记录。

2 个答案:

答案 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'