Лучший способ обрабатывать между двумя датами в postgresql на отметке времени - PullRequest
0 голосов
/ 14 июля 2020

У меня есть поле даты в моей таблице в формате yyyy-mm-dd HH:MM:SS, я хотел получить записи между 11-july-2020 включительно 14-july-2020, но записи отсутствуют на 14th. Пытается >= && < SYMMETRIC, но ни один из них не работает.

в настоящее время используется select .... from employee where ... and created_on in between ?1 and ?2. Исключая запись, созданную 14 числа.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Я думаю, вы хотите:

where col >= '2020-07-11' and col < '2020-7-15'

Или, express это с использованием временных меток:

where col::timestamp >= '2020-07-11'::timestamp and
      col::timestamp < '2020-07-14'::timestamp + interval '1 day'

Обратите внимание, что более высокий предел на один день позже, чем 2020-07- 14, поэтому вы можете получить все время в этот день.

Вы также можете использовать between как:

where col::date between '2020-07-11'::date and '2020-07-14'::date

Но я не рекомендую использовать between с данными даты / времени типы - именно из-за проблемы, которая у вас возникла с временной составляющей.

0 голосов
/ 15 июля 2020

Если ваше поле имеет формат yyyy-mm-dd HH:MM:SS, это поле отметки времени, а не поле даты. Это имеет большое значение для сравнения, которое необходимо провести, как показывает @Gordon. Если вы сравните метку времени с датой (14 июля 2020 года), дата будет преобразована в метку времени со временем 00: 00: 00:

select '07/14/2020'::timestamp;
      timestamp      
---------------------
 2020-07-14 00:00:00

Это означает, что вы пропустите метки времени на 14-е, приходящееся после полуночи 13/14-го.

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