У меня есть набор данных документов с соответствующими датами публикации (обычные Postgres TIMESTAMP
. После того, как я заметил, что некоторые из этих точек данных по какой-то причине недействительны, я хотел бы удалить все документы из определенного выпуска, опубликованные вчас 10-11 утра, в две конкретные даты.
До сих пор я придумал два разных запроса для этого, но они странным образом возвращают разные результаты. Первый возвращает все документы, основанные на простом DATETIME
запрос диапазона и имеет 1603 результатов.
Второй запрашивает только дни, а затем все элементы, имеющие DATE_PART('HOUR', published) = 10
, которые должны (теоретически) возвращать точно такие же.
Как показывает следующий запрос, есть два элемента, которые случайно публикуются точно в час. Хотя они все еще имеют одинаковую подпись DATE_PART
, они, похоже, игнорируются во втором запросе.
Может кто-нибудь сказать мне, является ли это поведение по умолчанию, или почему это даст разные ответы?
postgres=# SELECT document_id, published, DATE_PART('HOUR', published) AS hour
FROM documents
WHERE (published >= '2016-08-18 10:00:00.000' AND published <= '2016-08-18 10:59:59.999')
OR (published >= '2016-08-28 10:00:00.000' AND published <= '2016-08-28 10:59:59.999')
AND feedName = 'WP'
EXCEPT
SELECT document_id, published, DATE_PART('HOUR', published) AS hour
FROM documents WHERE (to_char(published, 'YYYY-MM-DD') = '2016-08-18'
OR to_char(published, 'YYYY-MM-DD') = '2016-08-28')
AND feedName = 'WP' AND DATE_PART('HOUR', published) = 10;
document_id | published | hour
-------------+---------------------+------
75676 | 2016-08-18 10:00:00 | 10
76424 | 2016-08-18 10:00:00 | 10