Изначально это должен был быть вопрос о том, как это реализовать, потому что я застрял в определенной части, но теперь мне любопытно, почему это вообще происходило. Мне нужно было сравнивать только даты, а не время, что не было бы проблемой, если бы времена не различались. В приведенном ниже коде показан запрос, который я изначально пытался.
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>, а затем в итоге не получил никаких результатов. Также, если кто-то знает лучший способ реализовать это, дайте мне знать.