卡桑德拉时间戳问题

时间:2016-11-18 20:20:39

标签: java cassandra timestamp cqlsh

多部分问题: 1.如何查找/设置默认时间戳格式? 2.我有一个我需要插入的时间戳列 - 但我只有时间(没有日期或年份) - 我该怎么做? (这是否有意义)

我运行了一些基本测试进行实验,无法解决任何问题:

CREATE TABLE testts (
            ID int PRIMARY KEY,
            mdate timestamp,            
            ttime timestamp);

INSERT INTO testts (ID , mdate, ttime )
VALUES (1, '2015-10-12', '2014-10-12') ;

INSERT INTO testts (ID , mdate, ttime )
VALUES (2, '2015/10/15', '2013/10/12') ;  //This fails

INSERT INTO testts (ID , mdate, ttime )
VALUES (2, '20151015', '20131012') ;  //Did not put any format

INSERT INTO testts (ID , mdate, ttime )
VALUES (3, '2009-08-12', '1020') ; //my actual data is just time

cqlsh:tests> select * from testts;

 id | mdate                    | ttime
----+--------------------------+--------------------------
  1 | 2015-10-12 07:00:00+0000 | 2014-10-12 07:00:00+0000
  2 | 1970-01-01 05:35:51+0000 | 1970-01-01 05:35:31+0000  //1970 ??
  3 | 2009-08-12 07:00:00+0000 | 1970-01-01 00:00:01+0000  //1970 ??

(3 rows)

如上所述1970年出现了什么?!

全心全意,

1 个答案:

答案 0 :(得分:0)

来自the official documentation(如果这是可视化问题):

  

您可以通过在中设置time_format属性来更改格式   [ui] cqlshrc文件的部分。

在同一链接中,您可以找到需要了解的所有信息。具体做法是:

  

时间戳类型的值被编码为64位有符号整数   表示自标准基准时间以来的毫秒数   被称为时代:1970年1月1日格林威治标准时间00:00:00。

您只有时间插入将相对于该日期,并将按原样显示。

您可以使用普通timestamp(或int,根据您的需要)来存储仅限时间的部分,而不是使用bigint列。