日期算术:Cassandra 4
Date Arithmetic: Cassandra 4
我加载到 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 语法不正确,但不太知道 how/where 修复它。
例如,我希望获得以毫秒为单位的差异并将其转换为年或月。(我希望转换部分很简单)
我确信我快到了,但我尝试过的所有示例中的语法都不正确。
经过几天的网络搜索,没有找到真正相似的例子。
我猜 Cassandra 4 可以做到这一点。
版本:
卡桑德拉版本:4.0-beta2,cqlsh 5.0.1
做你想做的最简单的方法是:
SELECT x, toUnixTimestamp(date_1) - toUnixTimestamp(date_2) as age FROM y WHERE a = 'z';
我加载到 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 语法不正确,但不太知道 how/where 修复它。
例如,我希望获得以毫秒为单位的差异并将其转换为年或月。(我希望转换部分很简单)
我确信我快到了,但我尝试过的所有示例中的语法都不正确。
经过几天的网络搜索,没有找到真正相似的例子。
我猜 Cassandra 4 可以做到这一点。
版本: 卡桑德拉版本:4.0-beta2,cqlsh 5.0.1
做你想做的最简单的方法是:
SELECT x, toUnixTimestamp(date_1) - toUnixTimestamp(date_2) as age FROM y WHERE a = 'z';