代码之家  ›  专栏  ›  技术社区  ›  Awaken

SQL Server日期时间查询问题

  •  0
  • Awaken  · 技术社区  · 16 年前

    我是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 回复  |  直到 16 年前
        1
  •  4
  •   Jakob Christensen    16 年前

    “ORDER BY”子句必须在“WHERE”子句之后。SQL语句应为

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

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

        2
  •  3
  •   AllenG    16 年前

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

    你的 WHERE 和 ORDER BY 条款颠倒。

    SELECT * . 即使选择了所有列,也要命名列。

        3
  •  2
  •   Rob    16 年前

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

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

    我 认为 WHERE 条款必须在 ORDER BY

        4
  •  1
  •   OMG Ponies    16 年前

    您不需要为此查询使用参数,除非您希望支持将来可能发生的更改—您可以使用 GETDATE()

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

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