SQL Server DateTime查询问题

时间:2010-07-29 14:59:12

标签: c# sql-server datetime sql-server-ce

我正在使用SqlServer Compact 3.5(2008),并且我正在尝试返回具有今天或以前的日期时间字段的行。这是我正在尝试的代码,但它抛出异常。 (在Where子句中)

我是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);

4 个答案:

答案 0 :(得分:4)

“ORDER BY”子句必须位于“WHERE”子句之后。 SQL语句应该是

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

另请注意我使用的是“&lt;”而不是“&lt; =”。不应使用DateTime.Today,而应使用DateTime.Today.AddDays(1),因为DateTime.Today将为您提供'2010-07-29 00:00:00',即7月28日至29日的午夜。因此,你的条款不会给你今天的记录。

答案 1 :(得分:3)

正确的Sql语法是

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

您的WHEREORDER BY条款相反。

另外。不要SELECT *。即使您选择了所有这些,也请为列命名。

答案 2 :(得分:2)

代替您正在检索的特定异常,请尝试更改您的查询,使其结构如下:

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

认为 WHERE子句必须在ORDER BY子句之前

答案 3 :(得分:1)

您不需要为此查询使用参数,除非您希望将来支持更改的可能性 - 您可以使用GETDATE()返回当前日期时间:

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

问题是你在错误的位置有WHERE子句 - 它在FROM之后,在GROUP BY,HAVING,ORDER BY之前(按此顺序)。