为什么我需要对每个时间戳进行类型转换?
Why do I need to typecast every timestamp?
我正在将 PostgreSQL 12.6 与 TimescaleDB 一起使用,并且我有一个带有“时间”字段的 hypertable:
"time" timestamp without time zone NOT NULL
当我尝试使用“时间”时,我需要像这样对其进行类型转换。
SELECT COUNT(*) FROM raws WHERE "time"::date BETWEEN '2016-04-19 15:16:00' AND '2021-04-19 15:16:00'
问题是我正在处理现有的代码库,而我的同事不需要进行类型转换。这是我缺少的设置,还是我们真的需要进行类型转换?
编辑:
我忘了说 table 是一个 hypertable。
我从转储中导入了所有数据,这是我为“时间”获得的数据之一:
2021-04-08 00:00:00
带强制转换的查询得到了大约一百万个结果,但没有强制转换我得到了 0 个结果。
我试图重新索引 hypertable 但我得到了这个 :
REINDEX TABLE raws;
ERROR: chunk not found
转换为 date
后,PostgreSQL 会将字符串文字 '2021-04-19 15:16:00'
转换为 date
以匹配左侧的数据类型。结果,小时、分钟和秒被丢弃。
有关详细参考,请参阅 type conversion rules for functions。
因此似乎有 "time"
等于 2016-04-19 00:00:00
的行,但是 none 与 2016-04-19 15:16:00
.
我正在将 PostgreSQL 12.6 与 TimescaleDB 一起使用,并且我有一个带有“时间”字段的 hypertable:
"time" timestamp without time zone NOT NULL
当我尝试使用“时间”时,我需要像这样对其进行类型转换。
SELECT COUNT(*) FROM raws WHERE "time"::date BETWEEN '2016-04-19 15:16:00' AND '2021-04-19 15:16:00'
问题是我正在处理现有的代码库,而我的同事不需要进行类型转换。这是我缺少的设置,还是我们真的需要进行类型转换?
编辑: 我忘了说 table 是一个 hypertable。 我从转储中导入了所有数据,这是我为“时间”获得的数据之一:
2021-04-08 00:00:00
带强制转换的查询得到了大约一百万个结果,但没有强制转换我得到了 0 个结果。
我试图重新索引 hypertable 但我得到了这个 :
REINDEX TABLE raws;
ERROR: chunk not found
转换为 date
后,PostgreSQL 会将字符串文字 '2021-04-19 15:16:00'
转换为 date
以匹配左侧的数据类型。结果,小时、分钟和秒被丢弃。
有关详细参考,请参阅 type conversion rules for functions。
因此似乎有 "time"
等于 2016-04-19 00:00:00
的行,但是 none 与 2016-04-19 15:16:00
.