Помните, что SQL Server DATETIME включает компонент времени, и , если вы не укажете время, по умолчанию используется полночь - и полночь - это первое мгновение этого дня.
В практическом плане, если вы сказали BETWEEN '6/3/2010' AND '6/4/2010'
, то единственные записи за 6/4, которые вы увидите, это записи, которые произошли 4/4/2010 в 00:00:00. Если у вас есть запись 6/4 в 12:34, она не будет возвращена.
Лучшее решение - это (A) использовать явные> и <; и (B) использовать математику даты, чтобы получить правильную конечную точку, если вы используете только даты без времени. E.g.:</p>
WHERE order_date >= @StartDate
AND order_date < CAST(FLOOR(CAST(@StartDate AS FLOAT)) AS DATETIME) + 1