我正在使用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);
答案 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
您的WHERE
和ORDER 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之前(按此顺序)。