簡體   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