我表格中的列
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
答案 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);