使用 DATE_FORMAT() 选择数据时未获得正确的值 MySQL

When selecting data with DATE_FORMAT() is not getting proper values MySQL

我有一个 table 结构如下。

create table date_test (dt datetime);

插入语句:

insert into date_test values('2019-08-12');
insert into date_test values('2019-09-10');
insert into date_test values('2019-10-04');
insert into date_test values('2019-11-05');
insert into date_test values('2019-12-15');
insert into date_test values('2020-01-15');
insert into date_test values('2020-02-07');
insert into date_test values('2020-03-08');
insert into date_test values('2020-04-10');
insert into date_test values('2020-05-15');
insert into date_test values('2020-06-10');
insert into date_test values('2020-07-15');
insert into date_test values('2020-08-10');
insert into date_test values('2020-09-15');

当我 select 使用以下查询时,我没有得到正确的结果。

SELECT * from date_test 
WHERE DATE_FORMAT(dt,'%d-%m-%Y') < DATE_FORMAT(SYSDATE()-INTERVAL 90 DAY,'%d-%m-%Y') 

输出:

2019-08-12 00:00:00
2019-09-10 00:00:00
2019-10-04 00:00:00
2019-11-05 00:00:00
2019-12-15 00:00:00
2020-01-15 00:00:00
2020-02-07 00:00:00
2020-03-08 00:00:00
2020-04-10 00:00:00
2020-05-15 00:00:00
2020-06-10 00:00:00
2020-07-15 00:00:00
2020-08-10 00:00:00
2020-09-15 00:00:00

我需要 dt 值小于 90 天的数据。 任何人都可以建议在哪里进行更改。

我认为你把这里的事情复杂化了。基本上,您是将日期转换为 dd-mm-yyyy 格式的字符串,然后比较这些字符串。这不会做你想要的。通常,字符串 31-12-2020 大于 01-01-2021,(因为前者以 3 开头,而后者以 0 开头),而相应的日期则相反。

您有一个 datetime 列,所以只需使用算术:

where dt < current_date() - interval 90 day

除了正确之外,这也比对正在比较的列执行转换更有效(例如:它可能利用 dt 上的索引)。

您不应在 where 语句中使用格式。在 select 部分使用它来格式化返回结果,如:

SELECT DATE_FORMAT(dt,'%d-%m-%Y') AS dt
FROM date_test 
WHERE dt < DATE_SUB(SYSDATE(), INTERVAL 90 DAY);

SQLize.online

中查看