2016-11-18 440 views
0

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

我跑了一些基本的测试实验,无法真正解决任何问题:

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显示出来?

感谢所有,

+0

如果没有所有字段,则不是时间戳。如果这不是你想要存储的,不要使用'timestamp'。改为使用每个时间字段的列。 –

+0

> select * from testtime; ID | mdate | ttime ---- + -------------------------- + ---------------- ---- 1 | 2015-10-12 07:00:00 + 0000 | 00:00:00.000001020 2 | 2014-08-15 07:00:00 + 0000 | 00:00:00.000000930 (2 rows) –

+0

(上面的评论已经预先发布)是的,它确实不使用时间戳(除非有办法)。因此,尝试使用时间列类型,并输入像1020,930等时间,但选择获得** 0s **在前面 - 它们是什么意思 - 看起来不像date/year'> select * from testtime; ID | mdate | ttime ---- + -------------------------- + ---------------- ---- 1 | 2015-10-12 07:00:00 + 0000 | 00:00:00.000001020 2 | 2014-08-15 07:00:00 + 0000 | 00:00:00.000000930 (2行)' –

回答

0

the official documentation(如果这是一个可视化的问题):

您可以通过在cqlshrc文件的 [UI]部分设置TIME_FORMAT属性更改格式。

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

值的时间戳类型被编码为64位带符号的整数表示 以来被称为历元标准的基本时间 毫秒数:1970年1月1日00:00:00 GMT。

您只有时间插入才会与该日期相关,并且会按原样显示。

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