我的日期格式为:YYYYMMDD
CURDATE() returns: YYYY-MM-DD
我想要start_on的每周记录,并且使用mysql失败,所以尝试了:
SELECT SPLIT_STR(started_on, ' - ', 1), failed FROM 1_results WHERE (DATE_SUB(REPLACE(CURDATE(), '-', ''), INTERVAL 7 DAY) <= SPLIT_STR(started_on, ' - ', 1);
但是得到错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 2
也试过DATEDIFF
但没有运气。
单独运行SPLIT_STR(started_on, ' - ', 1) and REPLACE(CURDATE(), '-', '')
工作正常,但上述查询失败。
答案 0 :(得分:1)
考虑到started_on
是一个字符串,最好的办法是使用STR_TO_DATE函数将其转换为正确的MySQL日期,如下所示:
STR_TO_DATE(started_on, '%Y%m%d')
这将返回一个适当的日期,然后您可以使用它来轻松进行比较。唯一仍需改变的是你从当前日期减去7天的部分。你真的过度复杂了,你只需要:
DATE_SUB(CURDATE(), INTERVAL 7 DAY)
所以你的整个查询就变成了:
SELECT SPLIT_STR(started_on, ' - ', 1), failed FROM 1_results
WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= STR_TO_DATE(started_on, '%Y%m%d') ;