Равно операции, не работающей со столбцом метки времени postgresql - PullRequest
0 голосов
/ 04 апреля 2020

Попытка выполнить следующий запрос,

select * from "Activities" where "CreatedDateTime" = '2020-04-01 05:52:59'::timestamp;

, где тип CreatedDateTime равен отметка времени

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Проблема в долях секунды. Одно из решений:

date_trunc('second', "CreatedDateTime") = '2020-04-01 05:52:59'::timestamp

Однако я не рекомендую этого, потому что он не может использовать индексы. Вместо этого:

"CreatedDateTime" >= '2020-04-01 05:52:59'::timestamp and
"CreatedDateTime" < '2020-04-01 05:52:59'::timestamp + interval '1 second'

Примечание. Предполагается, что вы хотите «усечение» для совпадения. Если вы хотите округлить:

"CreatedDateTime" >= '2020-04-01 05:52:59'::timestamp - 0.5 * interval '1 second' and
"CreatedDateTime" < '2020-04-01 05:52:59'::timestamp + 0.5 * interval '1 second'
0 голосов
/ 04 апреля 2020

Как уже было предложено, наиболее вероятная причина заключается в том, что сохраненные временные метки содержат микросекундные данные, а ваш запрос не:

2020-04-01 05:52:59.128256 != 2020-04-01 05:52:59

Чтобы обойти это, вы можете использовать интервал для сравнения, как в:

SELECT * FROM "Activities"
    WHERE "CreatedDateTime" >= '2020-04-01 05:52:59'
        AND "CreatedDateTime" < '2020-04-01 05:53:00';

Вы не указали язык программирования, но если вы его используете, добавление секунды к существующему объекту timestamp или datetime должно быть простым.

...