2016-08-04 84 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