【问题标题】:When selecting data with DATE_FORMAT() is not getting proper values MySQL当使用 DATE_FORMAT() 选择数据时,MySQL 没有得到正确的值
【发布时间】:2021-02-05 08:25:55
【问题描述】:

我的表结构如下。

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 * 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 天的数据。 任何人都可以建议在哪里进行更改。

【问题讨论】:

  • 抱歉,您想要实现的目标还不是很清楚。请发布想要的结果

标签: mysql sql string datetime where-clause


【解决方案1】:

您不应该在 where 语句中使用格式。在选择部分使用它来获取格式返回的结果,例如:

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

SQLize.online

【讨论】:

    【解决方案2】:

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

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

    where dt < current_date() - interval 90 day
    

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

    【讨论】:

    • 是的,但是该查询出了什么问题
    • @Kumar:我举了一个例子说明我的回答中的查询有什么问题。
    猜你喜欢
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多