等于操作不适用于时间戳列postgresql



尝试运行以下查询,

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

其中CreatedDateTime类型为时间戳

如前所述,最有可能的原因是存储的时间戳有微秒级的数据,而您的查询没有:

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';

您还没有指定编程语言,但如果您正在使用编程语言,那么向现有的时间戳日期时间对象添加第二种语言应该很容易。

问题是几分之一秒。一种解决方案是:

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'

最新更新