一、時間計算的三大核心場景
當你遇到這些需求時,本文就是你的救星🌟:
-
倒計時功能:計算活動剩余天數
-
用戶行為分析:統計操作間隔時間
-
跨國系統:多時區時間統一管理
-
報表生成:自動計算同比/環比周期
二、時間計算的5種神兵利器
1. 減法直接計算時間差
-- 計算訂單處理時長(小時)
SELECT order_id,(complete_time - create_time) AS 時間差,EXTRACT(HOUR FROM (complete_time - create_time)) AS 小時數
FROM orders;
輸出示例:"1 day 02:30:00"
?→ 26.5小時
2. AGE函數計算精準年齡
-- 計算員工精確工齡
SELECT name,AGE(now(), hire_date) AS 總工齡,EXTRACT(YEAR FROM AGE(now(), hire_date)) || '年' AS 年數
FROM employees;
輸出結果:3 years 4 mons 5 days
?→ 3年
3. 時間分量加減法
-- 計算三天后的日期
SELECT now() + INTERVAL '3 days';-- 精確時間計算(2小時15分鐘后)
UPDATE meetings
SET start_time = start_time + INTERVAL '2 HOURS 15 MINUTES'
4. 日期截斷函數DATE_TRUNC
-- 獲取當月第一天
SELECT DATE_TRUNC('month', now());-- 按周統計數據
SELECT DATE_TRUNC('week', log_time) AS 周開始,COUNT(*)
FROM logs
GROUP BY 1;
5. 生成時間序列GENERATE_SERIES
-- 生成最近7天日期
SELECT generate_series(current_date - INTERVAL '6 days',current_date,INTERVAL '1 day'
) AS date;
三、跨國系統必備:時區轉換全攻略
1. 查看數據庫時區
SHOW TIME ZONE; -- 輸出示例:Asia/Shanghai
2. 時區轉換三種寫法
-- 寫法1:AT TIME ZONE關鍵字
SELECT now() AT TIME ZONE 'Asia/Tokyo';-- 寫法2:帶時區類型轉換
SELECT '2024-01-20 15:00:00'::timestamp WITH TIME ZONE AT TIME ZONE 'UTC';-- 寫法3:時區函數
SELECT timezone('America/New_York', now());
3. 全球時區對照案例
-- 紐約時間轉北京時間
SELECT event_time AT TIME ZONE 'America/New_York' AS 紐約時間,event_time AT TIME ZONE 'Asia/Shanghai' AS 北京時間
FROM global_events;
四、實戰演練:電商大促分析
/* 需求:分析雙11每小時成交額變化趨勢(UTC+8時區)*/
SELECTEXTRACT(HOUR FROM payment_time AT TIME ZONE 'Asia/Shanghai') AS 小時,SUM(amount) AS 成交額
FROM payments
WHERE payment_time >= '2023-11-11 00:00:00+08' ANDpayment_time <= '2023-11-12 00:00:00+08'
GROUP BY 1
ORDER BY 1;
五、擴展學習:常用時間函數表
函數 | 描述 | 示例 |
---|---|---|
NOW() | 當前時間 | SELECT NOW() |
CURRENT_DATE | 當前日期 | SELECT CURRENT_DATE |
MAKE_INTERVAL | 創建間隔 | MAKE_INTERVAL(days => 7) |
ISFINITE | 檢查時間有效性 | WHERE ISFINITE(expire_time) |
覺得有用?點贊??收藏??關注?,系統學習PostgreSQL看👉#PostgreSQL從入門到精通 合集!