【发布时间】:2013-02-07 18:19:34
【问题描述】:
这本来是一个关于如何实现它的问题,因为我被困在某个部分,但我现在很好奇为什么会发生这种情况。我只需要比较日期而不是时间,如果时间没有差异,这不会成为问题。下面的代码显示了我最初尝试的查询
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 个结果 ()。在查看数据后,我可以看到其中 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 高于和低于指定日期时一样测试了它。当日期 8 个结果时。最终查询产生了 6 个结果。现在这不是我要查询的生产数据库,我是唯一使用它的人,所以数据没有改变。关于为什么会发生这种情况的任何解释?我假设它与将其转换为 varchar 有关,并且无法正确比较,但这并不能解释为什么我会得到 12 然后最终没有结果。另外,如果有人知道更好的实现方法,请告诉我。
【问题讨论】:
-
这已经被问过了(在某种程度上)在这里检查接受的答案...stackoverflow.com/questions/2775/…
标签: sql sql-server tsql date-comparison