2016-08-04 88 views
0

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

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

我通过创建unixdate领域,使得这样的查询做了一个解决办法:

SELECT * FROM shows WHERE udate >1472626800 

但是,从我读,前者应该工作,我很好奇,为什么它没有。

+5

请添加表结构和数据。例如可能几行。 –

+1

在另一条评论中,您将显示具有其他布尔术语的不同SQL查询。当你问一个关于代码的问题时,**发布你有问题的代码**,而不是其他代码。 –

回答

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

请在布尔表达式中优先头脑规则。

X AND Y OR Z 

这是一样的:

(X AND Y) OR Z 

哪个是真正的随时随地Z是真实的,即使X和Y是假的。

为了解决这个问题,加括号明确地覆盖默认的布尔运算优先级:

X AND (Y OR Z) 
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 
+0

我必须为我的过滤器使用错误的sql,因为当我这样做时,日期过滤器失败: SELECT * FROM显示哪里udate> 1472626800 AND showstate ='MO'或showstate ='KS' – ImproperUsername

+0

show a示例请告诉我showdate的数据类型 – scaisEdge

+0

好吧,这是一个愚蠢的,愚蠢的noob错误。这个SQL做我想要的:SELECT * FROM显示哪里udate> 1472626800和showstate IN('MO','KS')order by ASK – ImproperUsername