【问题标题】:Date Arithmetic: Cassandra 4日期算术:Cassandra 4
【发布时间】:2021-02-15 03:59:28
【问题描述】:

我加载到 Cassandra 的数据包含日期(时间戳类型)。 我需要对这些日期进行计算以计算,例如给定日期和 now() 或两个日期(时间戳类型)列之间的差异。

我试过了:

SELECT x, date_1 - date_2 as age  FROM y WHERE a = 'z';

我尝试了括号、“AS”子句并将时间戳转换为日期类型,但收到了错误。

我也尝试过创建 UDF(用户定义函数):

CREATE OR REPLACE FUNCTION x.age_calc (tounixtimestamp(date_1) int, tounixtimestamp(date_2) int) RETURNS NULL ON NULL INPUT RETURNS int LANGUAGE java AS 'return Integer.valueOf(Math.abs(tounixtimestamp(date_1) - tounixtimestamp(date_2)))';

我可以看到上面的 UDF 语法不正确,但不太清楚如何/在哪里修复它。

例如,我希望以毫秒为单位获得差异并将其转换为年或月。(转换部分很容易,我希望)

我确信我快到了,但我在所有尝试过的示例中的语法都不正确。

几天的网络搜索没有发现真正相似的例子。

我猜 Cassandra 4 可以做到这一点。

版本: Cassandra 版本:4.0-beta2,cqlsh 5.0.1

【问题讨论】:

标签: date math cassandra cassandra-4.0


【解决方案1】:

做你想做的最简单的方法是:

 SELECT x, toUnixTimestamp(date_1) - toUnixTimestamp(date_2) as age  FROM y WHERE a = 'z';

【讨论】:

  • 谢谢@benjamin-lerer。工作完美。我想我在 Cassandra3 中尝试过这个并失败了,但在 Cassamdra4 中没有再次失败。我几乎放弃了。所以再次感谢。 Cassandra 日期算术将是博客文章的一个很好的主题。
猜你喜欢
  • 2017-08-23
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2012-07-22
  • 2012-01-14
  • 2011-07-21
相关资源
最近更新 更多