2012-06-21 32 views
0

所以基本上我有一個表 -SQL查詢不工作,因爲它應該

ID | from | To 

----------------- 
1 | 25.05.2012|30.05.2012 
----------------- 
2 | 15.05.2012|20.05.2012 
----------------- 
3 | 25.06.2012|30.06.2012 

和我有一個查詢

SELECT date.* 
FROM table AS date 
WHERE (date.from >= '25.05.2012' OR date.to >= '25.06.2012') AND (date.to <= '30.05.2012' OR date.from <= '25.05.2012') 
GROUP by date.id 

,但它不工作,可能是什麼問題呢?

+1

表是不是僅僅在它的數據更多。什麼是模式? –

+0

你面臨的問題是什麼? –

+0

請檢查我的答案,讓我知道,如果你有任何問題.. –

回答

1

date是MySQL中的保留關鍵字,嘗試調用表別的東西!

+0

已更改,但未修復,它不會將兩個選擇連接在一起。哦,不,我錯了,它固定,哈哈謝謝! – y2ok

1

您正在執行字符串比較,而不是日期比較,例如:26.0525.06更大,因爲比較僅達到儘可能的串的第二字符,並確定65更大。

爲了執行日期比較您可能需要將值存儲爲日期(優選),或在適當的字符串形式,例如yyyyMMdd

+0

你好,沒關係,這只是一個例子,在默認情況下有日期,但我懶得它目前寫,現在編輯它。 – y2ok

0
SELECT * FROM table WHERE (from >= '25.05.2012' AND to <= '25.05.2012') GROUP by id; 
0

「date」是MySQL中的保留字符串。我建議將所有具有該名稱的表和列重命名爲自定義名稱。這可能已經解決了你的問題。

0

點1:表,日期,從保留關鍵字。這些不應該用於命名錶。如果你的表名是表,使用反引號

第2點:當你有一個表爲什麼你要爲它創建別名?

3點:雖然比較日期應在yyyy-mm-dd格式。我相信fromto列是時間戳。

點4:沒有必要的GROUP BY語句的時刻,因爲你不使用任何聚合函數,例如SUM, COUNT, etc

您的查詢應該是

SELECT * 
FROM `table` 
WHERE 
    (`from`>= '2012-05-25' OR `to`>= '2012-06-25') 
    AND 
    (`to` <= '2012-05-30' OR `from` <= '2012-05-25'); 

如果你想通過日期作爲25.05.2012,使用STR_TO_DATE函數字符串轉換爲日期。

相關問題