获取最近2天的记录

hgc7kmma  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(323)

我正在尝试创建一个查询来获取过去两天的记录。在我的表中有一个名为dates的字段。数值如下:

05-08-2018 08:05:22
05-08-2018 10:15:42

年-月-日hh:ii:ss
我已经创建了查询。

SELECT id,title,description, dates
FROM post_feed where `dates` BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()
ORDER BY dates DESC LIMIT 100

当我运行查询时,它返回0条记录。好像日期格式有问题。

lpwwtiir

lpwwtiir1#

你的第二次约会在第一次约会之前。把大的日期放在第一位,把小的日期放在第二位。

SELECT id,title,description, dates
    FROM post_feed where CAST(`dates`as date) BETWEEN  CURDATE() AND CURDATE() - INTERVAL 1 DAY 
    ORDER BY dates DESC LIMIT 100
13z8s7eq

13z8s7eq2#

修复数据!查询不起作用,因为“date”值存储为text/varchar。这很容易解决:

update post_feed
    set dates = str_to_date(date, '%Y-%m-%d %H:%i:%s')

alter table post_feed
    modify column datetime;

瞧!您的查询现在可以工作了。

dldeef67

dldeef673#

试试这个 WHERE 条款:

WHERE STR_TO_DATE(dates, '%d-%m-%Y %H:%i:%s') BETWEEN DATE_ADD(CURDATE(), INTERVAL -2 DAY) AND CURDATE()
xmq68pz9

xmq68pz94#

好像你的日期被存储为varchar。必须将它们转换为日期(例如,使用 STR_TO_DATE )在进行任何比较之前。
例如,假设今天是2005年8月,您希望得到2004年8月和2005年8月(含)的结果:

SELECT id, title, description, dates
FROM post_feed
WHERE STR_TO_DATE(dates, '%d-%m-%Y') BETWEEN CURRENT_DATE - INTERVAL 1 DAY AND CURRENT_DATE
ORDER BY dates DESC
LIMIT 100

sql小提琴

相关问题