clickhouse日期时间比较未按预期工作

ac1kyiln  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(732)

我试着在clickhouse里比较datetime。但它似乎是以某种方式运作的。我的表中有一列要与之比较(now(),'utc')。如果该列中的datetime值小于(now(),'utc')时间,则我要从该记录中选择数据。
我创建了一个 create table my_table (mytimeDateTime,data' [type]) ENGINE= engine我要排队Select data from my_table where mytime < toDateTime(now(), 'UTC')` 即使mytime>todatetime(now(),'utc'),它也总是认为mytime<todatetime(now(),'utc')

v1uwarro

v1uwarro1#

在我看来,你插入数据的方式可能出了问题,或者你的clickhouse版本有一个bug。
下面的示例演示了如何在我的19.15.4.10服务器上按预期只选择前面的行。注意select sleep()以确保now()调用不同。

drop table if exists my_table;
create table my_table (mytime DateTime, data String) engine = Memory;
insert into my_table values(now(), 'a');
select sleep(1);
insert into my_table values(toDateTime('2020-01-01 00:00:00', 'UTC'), 'b');
select * from my_table where mytime < now();
select * from my_table where mytime < toDateTime(now(), 'UTC');

在我的服务器上,选择now()还是转换它并不重要。我还尝试了您最初定义表的方式,这也很有效。因此人们认为你的数据有问题。

ktca8awb

ktca8awb2#

这个问题背后的原因是在clickhouse中,它将datetime和datetime('utc')作为不同的对象,因此它们之间的比较无法按预期进行。因为我想与(now(),'utc')进行比较,所以必须更改 mytime 作为 DateTime ('UTC') .
我得把table换了 create table my_table (mytimeDateTime ('UTC'),data' [type]) ENGINE= engine`

相关问题