Mysql:选择最近30天内具有起始日期值的所有行

Mysql:选择最近30天内具有起始日期值的所有行,mysql,Mysql,表中的列 1) 身份证 2) 名字 3) 开始时间 日期作为普通字符串存储在开始时间字段中,格式为dd-mm-yyyy 我正在尝试获取开始时间距离当前日期不超过30天的记录 这是我到目前为止尝试过的问题 SELECT * FROM `agency_courses` WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= STR_TO_DATE(agency_courses.starting_time, '%d-%m-%Y') 预期结

表中的列

1) 身份证

2) 名字

3) 开始时间

日期作为普通字符串存储在
开始时间
字段中,格式为
dd-mm-yyyy

我正在尝试获取
开始时间
距离当前日期不超过30天的记录

这是我到目前为止尝试过的问题

SELECT *  FROM `agency_courses` 
        WHERE  DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= STR_TO_DATE(agency_courses.starting_time, '%d-%m-%Y')
预期结果

    2  test2 02-03-2019
    3  test3 08-03-2019

这个比较是错误的。您只希望看到比currdate早-间隔30天的行。因此,请将查询更改为:

SELECT COUNT(*) FROM `agency_courses` 
        WHERE  STR_TO_DATE(agency_courses.starting_time, '%d-%m-%Y') >= (NOW() - INTERVAL 30 DAY);
你可以尝试使用

select COUNT(*) 
FROM `agency_courses` 
WHERE str_to_date(agency_courses.starting_time, '%d-%m-%Y')
        BETWEEN NOW() 
         AND DATE_SUB(STR_TO_DATE('26-04-2019', '%d-%m-%Y'), INTERVAL 30 DAY) 
但是 查看您的示例,您似乎需要介于now()和now()之间的值+30天

select COUNT(*) 
FROM `agency_courses` 
WHERE str_to_date(agency_courses.starting_time , '%d-%m-%Y')
    BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) 

添加一个数据样本和预期的result@scaisEdge更新了样本数据我在回答中发布了一些建议仍然是相同的结果D样本日期和创建表添加了样本数据返回0行我需要将开始时间转换为日期吗??
select COUNT(*) 
FROM `agency_courses` 
WHERE str_to_date(agency_courses.starting_time, '%d-%m-%Y')
        BETWEEN NOW() 
         AND DATE_SUB(STR_TO_DATE('26-04-2019', '%d-%m-%Y'), INTERVAL 30 DAY) 
select COUNT(*) 
FROM `agency_courses` 
WHERE str_to_date(agency_courses.starting_time , '%d-%m-%Y')
    BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)