В чем разница между этими пунктами где-оговорками? - PullRequest
2 голосов
/ 04 августа 2011

Эти два запроса возвращают разные количества заказов, и не совсем понятно, почему. Первое предложение where является принятой correct версией:

where
year(OrderDate) = 2011
and MONTH(OrderDate) = 8
and DAY(OrderDate) = 3

но если я скажу что-то очень похожее:

WHERE 
io.OrderDate >= '2011-08-03 00:00:00' 
and io.OrderDate <= '2011-08-03 11:59:59'

У меня совершенно другое количество записей. Есть ли что-то, что я делаю неправильно в форматировании даты или что-то мне не хватает в логике? Я предпочел бы сказать последнее, так как имхо немного проще.

Ответы [ 3 ]

5 голосов
/ 04 августа 2011

РЕДАКТИРОВАТЬ:

Новый ответ, который я бы порекомендовал, сочетает в себе мой оригинал (как показано ниже) с комментариями, сделанными Микаэлем и Алексом.1006 *


Второй запрос просматривается только с полуночи до полудня.(00:00:00 - 11:59:59 - двенадцать часов)

WHERE 
io.OrderDate >= '2011-08-03 00:00:00' 
and io.OrderDate <= '2011-08-03 23:59:59'

Должен исправить это.

@ Ответ Алекса также имеет смысл.Количество миллисекунд (в зависимости от того, включает ли их ваша конкретная таблица).

WHERE 
io.OrderDate >= '2011-08-03 00:00:00.000' 
and io.OrderDate <= '2011-08-03 23:59:59.999'

Включает любые пропущенные дополнительные записи

3 голосов
/ 04 августа 2011

Вы должны сделать это так.

WHERE 
io.OrderDate >= '2011-08-03 00:00:00' 
and io.OrderDate < '2011-08-04 00:00:00'

Помимо того, что количество строк отличается в ваших запросах, первое не сможет использовать индекс для столбца OrderDate.

3 голосов
/ 04 августа 2011

Ну, 11:59:59 как раз перед полуднем (это 11 am , на который вы ссылаетесь), что означает, что вы пропустили 12 часов.

Кроме того, имейте в виду, что вы также можете указать миллисекунды в вашем DateTime.Таким образом, вы можете получить '2011-08-03 23:59:59.100', что после указанного вами максимального значения OrderDate (даже после исправления за 24 часа)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...