2014-02-24 132 views
2

我有一個timestamp列,其中我跟蹤何時外部傳感器記錄讀數。本專欄轉到microsecond,但我想將數據截斷爲decisecond用於分組目的。Postgres截斷時間戳截斷爲Decisecond

這個truncate function很好,但只允許分辨率爲millisecondmicrosecond。我只需要將我的數據修剪到decisecond以解決收集過程中的錯誤。

有沒有辦法將timestamp列修剪成decisecond

回答

0

Now()(當前時間)與您選擇的列替換:

select 
    -- current time 
    now(), 

    -- current time truncated to minutes 
    date_trunc('minute', Now()), 

    -- seconds from timestamp, including decimal part 
    extract(seconds from Now()), 

    -- seconds truncated to first decimal digit (results in seconds and decisecond) 
    trunc((extract(seconds from Now()))::numeric, 1), 

    -- add time truncated to minutes and seconds truncated to first decimal digit 
    date_trunc('minute', Now()) 
    + interval '1 second' * trunc((extract(seconds from Now()))::numeric, 1) 

注意,轉換爲numeric被要求作爲extract()回報double precisiontrunc(x, y)只接受numeric(見documentation

隨着列命名mytime這將是:

date_trunc('minute', mytime) 
    + interval '1 second' * trunc((extract(seconds from mytime))::numeric, 1) 

另一種選擇是截斷epoch

select 
    -- current time 
    now(), 

    -- epoch - number of seconds since epoch beginning, including decimal part 
    extract(epoch from Now()), 

    -- truncated to first decimal digit 
    trunc((extract(epoch from Now()))::numeric, 1), 

    -- converted back to timestamp 
    to_timestamp(trunc((extract(epoch from Now()))::numeric, 1)) 

使用命名mytime列,這將是:

to_timestamp(trunc((extract(epoch from mytime))::numeric, 1))  

文檔:extractepochto_timestamp