繁体   English   中英

在MonetDB中提取(从时间戳开始的年份)

[英]Extract (year from timestamp) in MonetDB

我尝试从monetdb中的时间戳中提取年份

select extract(year from ts), ts from orders;

但是这个查询显然会返回false结果:

 |   year   |     ts        | 
 ----------------------------
 | 17935405 | 1441695291096 |
 | 18245391 | 1441695601082 |
 | 18331748 | 1441695687439 |

如果TS列的数据类型只是纪元时间戳,即1970-01-01 00:00:00.000的毫秒数,则需要在EXTRACT工作之前将其转换为时间类型。 根据这个链接

convert函数称为epoch(int) 还有一个新的函数纪元(timestamp),它返回自纪元以来的秒数。

由于我无法在没有MonetDB实例的情况下验证这一点,我研究了一下,这看起来更加丑陋,但更有可能从纪元时间获得时间戳(基于这篇文章 ):

select TIMESTAMP '1970-01-01 00:00:00' + interval CAST(ts/1000 AS STRING)  seconds from orders;

因此,如果这是有效的,完整的解决方案将是这样的

select EXTRACT(YEAR from (TIMESTAMP '1970-01-01 00:00:00' + interval CAST(ts/1000 AS STRING) seconds)) from orders;

注意:语法最有可能因为我没有要测试的MonetDB实例

编辑:添加CAST(...作为STRING)根据此链接我希望这适用于像ts/1000这样的算术没有问题...

以下将有效。

select extract(year from (TIMESTAMP '1970-01-01 00:00:00' + CAST(1441695291096/1000 AS STRING)));

...的回报:

2015

...和这个:

select extract(year from (TIMESTAMP '1970-01-01 00:00:00' + CAST(1481767624000/1000 AS STRING)));

...的回报:

2016

所以对于你的查询:

select extract(year from ts), ts from orders;

...尝试:

select extract(year from (TIMESTAMP '1970-01-01 00:00:00' + CAST(ts/1000 AS STRING))) as "Year" from orders;

......它应该有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM