showdate
是一个日期时间字段 - 以下sql返回所有行,而不仅仅是日期晚于2016-08-31的行。
SELECT * FROM shows WHERE showdate > '2016-08-31'
我通过创建一个unixdate字段并进行如下查询来解决方法:
SELECT * FROM shows WHERE udate >1472626800
但是,从我读到的内容来看,前者应该有效,而且我很好奇它为什么没有。
答案 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