2017-07-31 67 views
0

我有一個表(稱爲time_table),其中有一個名爲「time」的列。此列在下面的格式時間戳: 2017年7月31日9時08分42秒PostgreSQL函數表中的所有行

換句話說: YYYY-MM-DD HH:MM:SS

我希望把所有這些時間戳間隔五分鐘。所以,例如,09:00:00是一個間隔,09:05:00是另一個間隔。上面的例子,因此將被放置在2017-07-31 09:05:00區間。

我的用於執行此操作計劃如下:

  1. 轉換時間戳信號出現時間
  2. 計算劃時代%300
  3. 從曆元
  4. 減去(劃時代%300)

實施例:

2017-07-31 09:08:42在時代是1501492122.

1501492122%300 = 222

1501492122 - 222 = 1501491900

1501491900被轉換爲2017年7月31日9時05分00秒。那是我的間隔。

我想在PostgreSQL中做到這一點。我認爲創建一個函數將是最簡單的。第一步可以用

select extract('epoch' from time) from time_table 

並且將時間戳正確地轉換爲紀元。但是我把把所有東西放到一個函數中都有問題現在我已經實現了以下內容:

create or replace function stamp_to_epoch() returns table (epoch_mod integer) as $$ 
declare 
epoch integer; 
epoch_mod integer; 
begin 
select extract('epoch' from time) from time_table into epoch; 
select (epoch % 300) into epoch_mod; 
return query select (epoch - epoch_mod); 
end; 
$$ language plpgsql; 

這將返回

stamp_to_epoch 
---------------- 
    1501491900 
(1 row) 

哪個是正確的,但不是所有行。換句話說,即使我有多行具有不同時間戳的明顯不同的時間間隔,它也只返回一行。我的想法是該函數計算第一個時間戳的紀元時間間隔,因此我只得到一個結果。我應該如何確保函數爲每一行計算這個值?

我覺得很難理解documentation這可能是我爲什麼會遇到這個問題。我已經搜索過,但認爲很難找到我正在尋找的東西。

編輯: 我被問到包括表輸入和預期的輸出。

表輸入(表:time_table):

time   
---------------------- 
2017-05-09 05:08:42 
2017-05-10 05:16:24 
2017-07-31 09:08:42 

預期輸出:

time   
---------------------- 
2017-05-09 05:05:00 
2017-05-10 05:15:00 
2017-07-31 09:05:00 
+0

請包含您的表格輸入數據和預期輸出。 –

+2

爲什麼不''選擇時間提取('epoch') - (從時間表中提取('epoch'from time)%300)? –

+0

@VaoTsun你是完全正確的。有時候大腦並沒有考慮以簡單的方式解決它。謝謝,那完美的作品。真的不能給你的評論一個「正確的答案」,但如果我可以的話,我會的。 – hokosha

回答

1

它不回答這個問題,但下面的代碼邏輯,你可以只

select extract('epoch' from time) - (extract('epoch' from time) % 300) 
from time_table 

根本沒有功能