这本来是一个关于如何实现这个功能的问题,因为我被困在某个部分,但我现在好奇为什么这首先发生。我只需要比较日期,而不是时间不会有问题的时间,如果时间没有不同。下面的代码显示我原本是想SQL Date通过仅使用日期比较而不是时间
SELECT *
FROM Employee e
inner join OT_Hours o on o.Emp_ID=e.Emp_ID
inner join Position p on p.Position_ID=e.Position_ID
inner join Signup_Sheet s on s.Employee_ID=e.Emp_ID
WHERE e.Eligible_OT=1 and s.Day_Shift = 1
and p.Position_Name = 'Controller'
and Convert(Varchar(20),s.Date,101) = '07/26/2010'
and Convert(Varchar(20),o.Date,101) <='07/26/2010'
and Convert(Varchar(20),o.Date,101) > '07/26/2009'
and o.Quantity NOT IN(0.3) order by o.Date DESC
我会得到任何结果,当我跑了查询的查询,但是当我删除了倒数第二行,它将返回12个结果(< =),当我删除了最后第3行,但保持倒数第二,它将返回6个结果(>)。在查看数据后,我可以看到其中4个结果应该已被返回。现在是奇怪的部分。以下是我目前使用的代码。
SELECT DISTINCT o.Date, e.Emp_ID as Emp_ID, e.First_Name+ ' ' +e.Last_Name as Name, o.Quantity as Sum
FROM Employee e
left join OT_Hours o on o.Emp_ID=e.Emp_ID
left join Position p on p.Position_ID=e.Position_ID
left join Signup_Sheet s on s.Employee_ID=e.Emp_ID
WHERE e.Eligible_OT=1 and s.Day_Shift = 1
and p.Position_Name = 'Controller'
and Convert(Varchar(20),s.Date,101) = '07/26/2010'
and o.Date between '07/26/2009' and '07/26/2010'
and o.Quantity NOT IN(0.3) order by o.Date DESC
此查询将返回结果,但我也测试它,就像o.Date高于和低于指定日期时做的那样。当日期为< =返回16个结果时,返回> 8个结果。最终查询产生6个结果。现在这不是我查询的生产数据库,我是唯一使用它的数据库,因此数据没有更改。为什么会发生这种情况的任何解释?我假设它与将其转换为varchar有关,它无法正确比较,但这并不能解释为什么我会得到12 < =,6>然后最终没有结果。如果有人知道更好的实现方式,请告诉我。
这已被问(在某种程度上)检查接受的答案在这里... http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion -of-datetime-value-sql-server – 2010-07-27 16:31:31