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和数据类型,事件开始和事件结束中可能存在的时间部分可能仍然存在问题。