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

时间:2019-02-23 17:18:43

标签: mysql

我表格中的列

1)id

2)名称

3)开始时间。

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

我正在尝试获取starting_time距当前日期不超过30天的记录。

这是我到目前为止尝试过的查询

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

但是即使起始时间距当前日期超过30天,它也会返回。

更新

我刚刚尝试过,但是返回0行

SELECT COUNT(*) FROM `agency_courses` 
        WHERE   STR_TO_DATE(agency_courses.starting_time, '%d-%m-%Y') <= (NOW() - INTERVAL 30 DAY)

样品数据

id name starting_time
1  test1 26-04-2019
2  test2 02-03-2019
3  test3 08-03-2019

预期结果

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

2 个答案:

答案 0 :(得分:1)

您可以尝试使用

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) 

答案 1 :(得分:0)

比较错误。您只希望看到比日期更旧的行-间隔30天。因此,将查询更改为:

SELECT COUNT(*) FROM `agency_courses` 
        WHERE  STR_TO_DATE(agency_courses.starting_time, '%d-%m-%Y') >= (NOW() - INTERVAL 30 DAY);