MySQL日期大于返回所有行

时间:2016-08-04 21:17:32

标签: mysql sql

showdate是一个日期时间字段 - 以下sql返回所有行,而不仅仅是日期晚于2016-08-31的行。

SELECT * FROM  shows WHERE  showdate >  '2016-08-31'

我通过创建一个unixdate字段并进行如下查询来解决方法:

SELECT * FROM  shows WHERE  udate >1472626800

但是,从我读到的内容来看,前者应该有效,而且我很好奇它为什么没有。

2 个答案:

答案 0 :(得分:2)

SELECT * FROM shows where udate > 1472626800 AND showstate = 'MO' OR showstate = 'KS'

请记住布尔表达式中的优先规则。

X AND Y OR Z

这与:

相同
(X AND Y) OR Z

即使X和Y为假,Z也为真也是如此。

要解决此问题,请显式添加括号以覆盖默认的布尔操作优先级:

X AND (Y OR Z)

答案 1 :(得分:1)

可能是你应该在日期正确转换你的字符串

 SELECT * FROM  shows WHERE  showdate > str_to_date( '2016-08-31', '%Y-%m-%d');

或您的上次评论

 SELECT * FROM  shows 
 WHERE  showdate > str_to_date( '2016-08-31', '%Y-%m-%d') 
 AND showstate IN ('MO','KS') order by showdate ASC