在 cassandra cql select 中获取当前日期
Get current date in cassandra cql select
在SQL,我可以做到:
select getdate(), getdate() - 7
其中 returns 当前日期以及当前日期 - 7 天。我想在 Cassandra CQL 中实现同样的目标。我试过了:
select dateof(now())
但这不起作用。它仅适用于插入而不适用于 select。我怎样才能得到相同的?任何帮助将不胜感激。
select dateof(now())
就其本身而言,你是对的,这是行不通的。但是如果你有一个你知道只有一行的 table(比如 system.local
):
aploetz@cqlsh:Whosebug> SELECT dateof(now()) FROM system.local ;
dateof(now())
--------------------------
2015-03-26 03:18:39-0500
(1 rows)
不幸的是,Cassandra CQL(还没有?CASSANDRA-5505)包括对算术运算的支持,更不用说日期算术了。因此,从该值中减去 7 天是您在应用程序级别必须执行的操作。
编辑 20200422
较新的语法改为使用 toTimestamp()
函数:
aploetz@cqlsh> SELECT toTimestamp(now()) FROM system.local;
system.totimestamp(system.now())
----------------------------------
2020-04-22 13:22:04.752000+0000
(1 rows)
从 20200422 开始,这两种语法都有效。
另一种可能的解决方案适用于您具有读取权限的任何 table,无论它是否只有一行、多行,甚至 none:
SELECT toTimestamp(now()) AS now, count(*) FROM any_table WHERE partition_key=xyz;
这里的区别在于聚合函数COUNT(*)
保证结果集总是恰好包含一行。
显然,将 any_table
替换为您具有读取权限的 table,并将 WHERE 子句替换为完全指定 table 分区键的内容。同样,不需要任何实际行与分区键的指定值匹配,因此可以对正确类型的任何值进行硬编码。
一边
dateof()
在 Cassandra 2.2.0-rc2 中被弃用。对于更高版本,您应该将其使用替换为 toTimestamp()
.
在SQL,我可以做到:
select getdate(), getdate() - 7
其中 returns 当前日期以及当前日期 - 7 天。我想在 Cassandra CQL 中实现同样的目标。我试过了:
select dateof(now())
但这不起作用。它仅适用于插入而不适用于 select。我怎样才能得到相同的?任何帮助将不胜感激。
select dateof(now())
就其本身而言,你是对的,这是行不通的。但是如果你有一个你知道只有一行的 table(比如 system.local
):
aploetz@cqlsh:Whosebug> SELECT dateof(now()) FROM system.local ;
dateof(now())
--------------------------
2015-03-26 03:18:39-0500
(1 rows)
不幸的是,Cassandra CQL(还没有?CASSANDRA-5505)包括对算术运算的支持,更不用说日期算术了。因此,从该值中减去 7 天是您在应用程序级别必须执行的操作。
编辑 20200422
较新的语法改为使用 toTimestamp()
函数:
aploetz@cqlsh> SELECT toTimestamp(now()) FROM system.local;
system.totimestamp(system.now())
----------------------------------
2020-04-22 13:22:04.752000+0000
(1 rows)
从 20200422 开始,这两种语法都有效。
另一种可能的解决方案适用于您具有读取权限的任何 table,无论它是否只有一行、多行,甚至 none:
SELECT toTimestamp(now()) AS now, count(*) FROM any_table WHERE partition_key=xyz;
这里的区别在于聚合函数COUNT(*)
保证结果集总是恰好包含一行。
显然,将 any_table
替换为您具有读取权限的 table,并将 WHERE 子句替换为完全指定 table 分区键的内容。同样,不需要任何实际行与分区键的指定值匹配,因此可以对正确类型的任何值进行硬编码。
一边
dateof()
在 Cassandra 2.2.0-rc2 中被弃用。对于更高版本,您应该将其使用替换为 toTimestamp()
.