Ваше решение в порядке. Однако, если даты являются литеральными, я бы предпочел:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Это работает точно так же, но более удобно в сопровождении, потому что ясно указывает на то, что каждая буквальная «дата» является отметкой времени, а не датой. Например, предположим, что кто-то меняет ваш запрос на следующий
AND datefield <= '2012-01-01'
... ожидая (и не в состоянии) включить в запрос полный день "2012-01-01". В более позднем синтаксисе намерение становится более ясным, и эта путаница предотвращается.
Чтобы сделать это еще более понятным (возможно, слишком многословным), вы можете выполнить явное приведение типов:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Я бы не стал использовать здесь ни to_date()
по тем же причинам (возможна путаница с типами данных), ни to_timestamp()
(он возвращает timestamptz
).
Кстати, я изменил регистр в соответствии с рекомендуемой практикой (ключевые слова в верхнем регистре, идентификаторы в нижнем регистре).
person
leonbloy
schedule
04.04.2013
between 2010-01-01
и 2012-01-01`, но на самом деле это почти то же самое. Есть ли лучший способ сделать это с помощью MSSQL (я никогда его не использовал)? - person Andre   schedule 04.04.2013