2014-06-06 30 views
0

下返回从我的DB一堆行:与STR_TO_DATE意外的行为()

USE test; 
SELECT * FROM aaaa 
WHERE dddd BETWEEN (NOW() - INTERVAL 42 DAY) AND (NOW() + INTERVAL 42 DAY) 

但对于原因,我不明白下面的查询返回任何内容:

USE test; 
SELECT * FROM aaaa 
WHERE dddd BETWEEN (STR_TO_DATE('2014/6/6', '%Y,%m,%d') - INTERVAL 42 DAY) AND (STR_TO_DATE('2014/6/6', '%Y,%m,%d') + INTERVAL 42 DAY) 

不应该它会返回相似数量的行吗?它同一天为什么,当我将它转换为datetime时,它是否不会返回?我没有得到任何错误。

+1

我在想什么?这不就是一个简单的印刷错误吗? – bernie

回答

0

你正在传递/分隔日期,但告诉MySQL它是,-分离的。由于您的字符串中没有,,因此格式不适用,并且最终的日期无效。

尝试

STR_TO_DATE('2014/6/6', '%Y/%m/%d') 

,而不是...

“无效 - 68天=无效的”,不是42天前。

+0

呵呵,这很简单 - 但为什么如果日期无效就不会抛出错误? – red888

+0

默认情况下,MySQL运行在“宽松”模式下,这种情况只会导致警告。你想要一个更严格的模式,例如http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sql-mode-full –

0

你应该日期格式使用

STR_TO_DATE('2014/6/6', '%Y/%m/%d') 

注意/,而不是,。 ;)