SQL查询结构未返回正确的结果

SQL查询结构未返回正确的结果,sql,Sql,我有以下疑问 SELECT eventID, description, title, event_start, event_end, userID FROM SIS_EVENT WHERE userID=1 OR (userID=0) AND event_start >=01/01/2017 AND event_end <=10/10/2017 这将起作用,但仅选择用户ID为1的记录,不会返回任何用户ID为0的记录 我觉得这就像是我的SQL的结构,但我不确定我做错了什

我有以下疑问

SELECT eventID, description, title, event_start, event_end, userID
FROM SIS_EVENT 
WHERE userID=1 OR (userID=0) AND
      event_start >=01/01/2017 AND event_end <=10/10/2017
这将起作用,但仅选择用户ID为1的记录,不会返回任何用户ID为0的记录

我觉得这就像是我的SQL的结构,但我不确定我做错了什么 谢谢你的帮助

下面是代码中的SQL

SqlCommand cmd = new SqlCommand("SELECT eventID, description, title, 
event_start, event_end, userID FROM SIS_EVENT WHERE userID IN (0, @user_id) 
AND event_start >= '@start' AND event_end <= '@end' ", con); 

        cmd.Parameters.AddWithValue("@start", start);
        cmd.Parameters.AddWithValue("@end", end);
        cmd.Parameters.AddWithValue("@user_id", HttpContext.Current.Session["userid"]);

如果我理解您的意图,您应该这样写查询:

SELECT eventID, description, title, event_start, event_end, userID
FROM SIS_EVENT 
WHERE userID IN (0, 1) AND
      event_start >= '2017-01-01' AND
      event_end <= '2017-10-10';
注:

日期常量应为单引号。 日期应使用ISO标准语法注意:在某些数据库中,可能需要在字符串前面加上日期。 用于多个比较。
我想你应该试着在两个逻辑比较之间使用括号

试着用括号来界定你的条件。 这将有助于:

SELECT eventID, description, title, event_start, event_end, userID FROM SIS_EVENT WHERE (userID=1 OR userID=0) AND event_start >=01/01/2017 AND event_end <=10/10/2017
或者,由于条件适用于您可以在中使用的同一列:

SELECT eventID, description, title, event_start, event_end, userID FROM SIS_EVENT WHERE (userID=1 OR userID=0) AND event_start >= 01/01/2017 AND event_end <= 10/10/2017;

首先,你的问题是,你把或条件,使条件 into->userId等于1还是其他值 关于datetime,比较需要一些转换,这里是我的代码改进:

 SELECT eventID, description, title, event_start, event_end, userID
        FROM SIS_EVENT 
        WHERE userID IN (0, 1) AND
             Convert(DateTime, event_start) >=Convert(DateTime,'2017-01-01',106) AND
             Convert(DateTime, event_end) <=Convert(DateTime,'2017-10-10',106);

SQL中没有用于比较的双等号。在我的小管理员中,查询生成器中使用了bracketsThanks来通知我@Josue MartinezI,这也不起作用,一旦移动到我的代码中,它将继续只检索类似于用户id的事件,而不检索任何用户id为0的事件,这里会有什么问题。我已经添加了代码above@JamesCrozier . . . AddWithValue可能有问题。添加具有正确类型的参数-这样做时,您就不需要在日期周围加引号。我已经删除了引号,日期可以正常工作,但问题是它只会提取链接到userID的AddwithValue的数据,而不是我也需要的硬编码userID=0。不要使用AddwithValue。将应用程序中的值转换为int,然后以这种方式添加值。请标记您正在使用的数据库管理系统Oracle、PostgreSQL、MySQL等等。您的SQL无效,甚至与下面的代码不匹配。2017年1月1日是指1除以1除以2017。”“2017年1月1日”会更好,但取决于数据库设置,以便DBMS正确解释字符串。逻辑错误在这里:userID=1或userID=0,并且。。。作为和优先于或。使用括号解决此问题:其中userID=1或userID=0和。。。。根据DBMS和数据类型,事件开始和事件结束中可能存在的时间部分可能仍然存在问题。