Mysql语法错误(DATE_SUB(REPLACE(CURDATE(),' - ',''),INTERVAL 7 DAY)< = SPLIT_STR(started_on,' - ',1);

时间:2016-03-26 07:23:22

标签: mysql

我的日期格式为: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(), '-', '')工作正常,但上述查询失败。

1 个答案:

答案 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') ;