2010-07-29 222 views
0

我正在使用SqlServer Compact 3.5(2008),並試圖返回具有今天或以前的日期時間字段的行。這是我正在嘗試的代碼,但它拋出了一個異常。 (在Where子句中)SQL Server日期時間查詢問題

我是SQL的新手,所以我遇到了這個問題。有任何想法嗎?如果您需要更多數據,請告訴我。

string selectStatement = 
    "SELECT * FROM EnglishSpanish ORDER BY AvgScore DESC " + 
    "WHERE NextShow <= @Today"; 
SqlCeCommand selectCommand = new SqlCeCommand(selectStatement, connection); 
selectCommand.Parameters.AddWithValue("@Today", DateTime.Today); 
+0

您收到的具體例外將有助於診斷這個=) – Rob 2010-07-29 15:01:46

+0

這就是說,我認爲這兩個答案是有關查詢順序(即WHERE需要在ORDER BY之前)是您的問題的正確答案=) – Rob 2010-07-29 15:03:42

+0

謝謝大家幫我解決這麼快。我很感激。 – Awaken 2010-07-29 15:23:45

回答

4

「ORDER BY」子句必須位於「WHERE」子句之後。 SQL語句應該閱讀

SELECT * FROM EnglishSpanish 
WHERE NextShow < @Today 
ORDER BY AvgScore DESC 

還要注意,我使用「<」,而不是「< =」。而不是使用DateTime.Today你應該使用DateTime.Today.AddDays(1),因爲DateTime.Today會給你'2010-07-29 00:00:00'這是7月28日至29日的午夜。因此你的條款不會給你今天的記錄。

+0

感謝您的額外信息。在我的情況下,我只用DateTime.Today和其他東西寫東西,所以我的所有SQL日期都應該在午夜時間,但我一定會查看我的數據並確保它的行爲如預期。 – Awaken 2010-07-29 15:24:11

3

正確的SQL語法是

SELECT * FROM EnglishSpanish 
WHERE NextShow <= @Today 
ORDER BY AvgScor DESC 

WHEREORDER BY條款是相反的。

另外。不要SELECT *。即使你選擇了所有這些,也要命名你的列。

2

代替你檢索特定的異常,請嘗試更改您的查詢,這樣它的結構是這樣的:

SELECT * FROM EnglishSpanish WHERE NextShow <= @Today ORDER BY AvgScore DESC 

認爲WHERE子句來的ORDER BY子句之前

1

你並不需要使用參數此查詢,除非你想支持未來變化的可能性 - 你可以使用GETDATE()返回當前日期時間:

SELECT * 
     FROM EnglishSpanish 
    WHERE nextshow <= GETDATE() 
ORDER BY AvgScore DESC 

的問題是你有WHERE子句在錯誤的位置 - 它在FROM之後,在GROUP BY,HAVING,ORDER BY(按該順序)之前。

+0

感謝您向我展示GETDATE()選項。 – Awaken 2010-07-29 15:20:28