首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crate DB时间戳查询

Crate DB时间戳查询
EN

Stack Overflow用户
提问于 2017-06-30 05:26:37
回答 2查看 1.2K关注 0票数 1

我已经在crate DB中创建了一个带有时间戳列的表。但是,在向其中插入记录时,没有像文档中提到的那样传递时区信息。

代码语言:javascript
复制
insert into t1 values(2,'2017-06-30T02:21:20');

它被存储为:

代码语言:javascript
复制
2   | 1498789280000 (Fri, 30 Jun 2017 02:21:20 GMT)

现在我的查询都失败了,因为时间戳已经记录为GMT,并且我的查询都在localtime timezone (亚洲/加尔各答)

如果有人遇到这个问题,请告诉我修改列的最好方法是什么,以便在不丢失GMT到IST的情况下将值从GMT更改为IST,它有数百万条不会丢失或损坏的重要记录。

干杯!

EN

回答 2

Stack Overflow用户

发布于 2017-07-04 16:18:17

当时间戳存储时没有时区信息时,CrateDB始终假定时间戳为协调世界时。这是由于内部表示为简单的long数据类型-这意味着您的时间戳被存储为一个简单的数字:https://crate.io/docs/reference/en/latest/sql/data_types.html#timestamp CrateDB也接受您的ISO字符串中的时区信息,因此只需插入insert into t1 values(2,'2017-06-30T02:21:20+05:30');就会将其转换为适当的UTC值。

对于已经存储的记录,您可以在查询字段时使DB知道时区,并通过将相应的时区值传递到date_truncdate_format函数中将输出转换回数据库:https://crate.io/docs/reference/en/latest/sql/scalar.html#date-and-time-functions

票数 1
EN

Stack Overflow用户

发布于 2017-07-17 17:30:59

这个UPDATE test set ts = date_format('%Y-%m-%dT%H:%i:%s.%fZ','+05:30', ts);应该可以做到这一点。

代码语言:javascript
复制
cr> create table test(ts timestamp);
CREATE OK, 1 row affected  (0.089 sec)
cr> insert into test values('2017-06-30T02:21:20');
INSERT OK, 1 row affected  (0.005 sec)
cr> select date_format(ts) from test;
+-----------------------------+
| date_format(ts)             |
+-----------------------------+
| 2017-06-30T02:21:20.000000Z |
+-----------------------------+
SELECT 1 row in set (0.004 sec)
cr> UPDATE test set ts = date_format('%Y-%m-%dT%H:%i:%s.%fZ','+05:30', ts);
UPDATE OK, 1 row affected  (0.006 sec)
cr> select date_format(ts) from test;
+-----------------------------+
| date_format(ts)             |
+-----------------------------+
| 2017-06-30T07:51:20.000000Z |
+-----------------------------+
SELECT 1 row in set (0.004 sec)

`

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44835245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档