Первоначально это был вопрос о том, как реализовать это, потому что я застрял в определенной части, но мне теперь любопытно, почему это происходит в первую очередь. Мне нужно было сравнить только даты, а не время, которое не было бы проблемой, если бы времена не отличались. Приведенный ниже код показывает запрос я первоначально пыталсяSQL Date Compare, используя только дату Не время
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-a-datetime-value-sql-server –