將時間戳截斷到特定邊界是資料庫處理中的常見操作。對於 Postgres,date_trunc 函數提供了一種將時間戳記四捨五入到小時或分鐘的簡單方法。然而,截斷到最接近的 5 分鐘間隔需要更客製化的方法。
直接方法
5 分鐘截斷的典型解決方案是將date_trunc 與整數除法和乘法運算:
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
代替🎜>取代方法
有兩種將時間戳截斷為 5分鐘間隔的替代方法:
方法1:曆元算術
此方法計算時間戳,方法是將其轉換為紀元/unix 時間,將其向下舍入到最近的5 分鐘間隔,然後轉換它回到時間戳記。以下查詢示範了這個方法:
SELECT to_timestamp( floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min')) * EXTRACT(epoch FROM interval '5 min') ) FROM huge_table AS ht
方法2:date_trunc 和date_part
此方法與直接方法類似,但它分別使用date_trunc 和date_part來實現四捨五入。以下查詢說明了此方法:
SELECT date_trunc('hour', ht.time) + date_part('minute', ht.time)::int / 5 * interval '5 min' FROM huge_table AS ht
效能比較
大型表上的效能測試表明,簡單的方法優於兩種替代方法。結果顯示:
Method | Run 1 (seconds) | Run 2 (seconds) | Run 3 (seconds) |
---|---|---|---|
Epoch Arithmetic | 39.368 | - | 39.526 |
date_trunc and date_part | 34.189 | - | 37.028 |
結論
雖然替代方法提供了一些多功能性和簡單性,但使用date_trunc 和date_part 的直接方法提供了截斷時間戳的最快解決方案在Postgres 中為5 分鐘間隔。
以上是如何在 PostgreSQL 中有效地將時間戳截斷為 5 分鐘間隔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!