SQL Server DateTime Query Issue - PullRequest
       8

SQL Server DateTime Query Issue

0 голосов
/ 29 июля 2010

Я использую SqlServer Compact 3.5 (2008) и пытаюсь вернуть строки с полем datetime, которое является сегодняшним или предыдущим.Это код, который я пытаюсь, но это исключение.(в предложении 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 ]

4 голосов
/ 29 июля 2010

Предложение «ORDER BY» должно следовать после предложения «WHERE».Оператор SQL должен читать

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

Также обратите внимание, что я использую «<» вместо «<=».Вместо использования <code>DateTime.Today вы должны использовать DateTime.Today.AddDays(1), потому что DateTime.Today даст вам «2010-07-29 00:00:00», то есть полночь между 28 и 29 июля.Следовательно, ваше предложение не даст вам записей за сегодня.

3 голосов
/ 29 июля 2010

Правильный синтаксис Sql будет

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

Ваши пункты WHERE и ORDER BY поменялись местами.

Также. Не SELECT *. Даже если вы выбираете все из них, назовите ваши столбцы.

2 голосов
/ 29 июля 2010

Вместо конкретного исключения, которое вы извлекаете, попробуйте изменить свой запрос так, чтобы он был структурирован следующим образом:

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

I думаю, должно появиться предложение WHEREдо пункта ORDER BY

1 голос
/ 29 июля 2010

Вам не нужно использовать параметр для этого запроса, если только вы не хотите поддерживать возможность изменения в будущем - вы можете использовать GETDATE() для возврата текущей даты и времени:

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

Проблема заключалась в том, что предложение WHERE было в неправильном месте - это после FROM, до GROUP BY, HAVING, ORDER BY (в этом порядке).

...