gpt4 book ai didi

cassandra - 选择与特定日期对应的 timeuuid 列

转载 作者:行者123 更新时间:2023-12-04 03:39:13 25 4
gpt4 key购买 nike

简短版本:是否可以查询与特定日期对应的所有 timeuuid 列?

更多细节:

我有一个表定义如下:

CREATE TABLE timetest(
key uuid,
activation_time timeuuid,
value text,
PRIMARY KEY(key,activation_time)
);

我用一行填充了它,如下( f0532ef0-2a15-11e3-b292-51843b245f21 是对应于日期 2013-09-30 22:19:06+0100 的 timeuuid ):
insert into timetest (key, activation_time, value) VALUES (7daecb80-29b0-11e3-92ec-e291eb9d325e, f0532ef0-2a15-11e3-b292-51843b245f21, 'some value'); 

我可以按如下方式查询该行:
select activation_time,dateof(activation_time) from timetest where key=7daecb80-29b0-11e3-92ec-e291eb9d325e

结果如下(使用 cqlsh)
 activation_time                      | dateof(activation_time)
--------------------------------------+--------------------------
f0532ef0-2a15-11e3-b292-51843b245f21 | 2013-09-30 22:19:06+0100

现在假设我的表中有很多数据,我想检索 activation_time 的所有行。对应于特定日期,例如 2013-09-30 22:19:06+0100 .

我本来希望能够查询 minTimeuuid('2013-09-30 22:19:06+0100') 之间的所有 timeuuids 的范围。和 maxTimeuuid('2013-09-30 22:19:06+0100')但这似乎不可能(以下查询返回零行):
select * from timetest where key=7daecb80-29b0-11e3-92ec-e291eb9d325e and activation_time>minTimeuuid('2013-09-30 22:19:06+0100') and activation_time<=maxTimeuuid('2013-09-30 22:19:06+0100'); 

似乎我需要使用一种技巧,我将查询中的第二个日期增加(一秒)以捕获行,即,
select * from timetest where key=7daecb80-29b0-11e3-92ec-e291eb9d325e and activation_time>minTimeuuid('2013-09-30 22:19:06+0100') and activation_time<=maxTimeuuid('2013-09-30 22:19:07+0100');

这感觉不对。我错过了什么吗?有没有更干净的方法来做到这一点?

CQL 文档讨论了 timeuuid functions但它对带有 timeuuids 的 gte/lte 表达式非常短,除了:

The min/maxTimeuuid example selects all rows where the timeuuid column, t, is strictly later than 2013-01-01 00:05+0000 but strictly earlier than 2013-02-02 10:00+0000. The t >= maxTimeuuid('2013-01-01 00:05+0000') does not select a timeuuid generated exactly at 2013-01-01 00:05+0000 and is essentially equivalent to t > maxTimeuuid('2013-01-01 00:05+0000').



附言以下查询也返回零行:
select * from timetest where key=7daecb80-29b0-11e3-92ec-e291eb9d325e and activation_time<=maxTimeuuid('2013-09-30 22:19:06+0100'); 

并且以下查询返回行:
select * from timetest where key=7daecb80-29b0-11e3-92ec-e291eb9d325e and activation_time>minTimeuuid('2013-09-30 22:19:06+0100');

最佳答案

我确定问题在于 cqlsh 不显示时间戳的毫秒数
所以真正的时间戳类似于'2013-09-30 22:19:06.123+0100'
当您调用 maxTimeuuid('2013-09-30 22:19:06+0100') 时缺少毫秒,则假定为零,因此与调用 maxTimeuuid('2013-09-30 22:19:06.000+0100) 相同')

以及 22:19:06.123 > 22:19:06.000 导致记录被过滤掉。

关于cassandra - 选择与特定日期对应的 timeuuid 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com