首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 日期時間函數大全與實戰應用指南

     編輯:DB2 教學

核心函數分類速查

類別函數說明
日期屬性提取YEAR/MONTH/DAY從日期/時間戳提取年/月/日
DAYOFWEEK1=周日 ... 7=周六
DAYOFWEEK_ISO1=周一 ... 7=周日 (ISO 標準)
時間屬性提取HOUR/MINUTE/SECOND/MICROSECOND從時間/時間戳提取時/分/秒/微秒
MIDNIGHT_SECONDS午夜至指定時間秒數 (0-86400)
字符串表示DAYNAME星期名稱 (如 Friday)
MONTHNAME月份名稱 (如 January)
CHAR(date/time/timestamp)轉預設格式字符串,便於拼接
格式化/解析TO_CHAR / VARCHAR_FORMAT時間戳按模板格式化為字符串
TO_DATE / TIMESTAMP_FORMAT字符串按模板解析為時間戳
TIMESTAMP_ISO日期/時間/時間戳 → 標準時間戳
TIMESTAMP多種字符串格式 → 時間戳
日期運算date + 1 YEAR / 3 MONTHS / 15 DAYS英文自然語言加減運算
DAYS(date)日期轉整數 (從 0001-01-01 起),支援減法求天差
精確時間差TIMESTAMPDIFF(n, char(ts1-ts2))近似差值,n=1微秒..256年,假設每月 30 天、無閏年
(DAYS(ts1)-DAYS(ts2))*86400 + (MIDNIGHT_SECONDS(ts1)-MIDNIGHT_SECONDS(ts2))精確秒差,建議封裝為 UDF secondsdiff
其他JULIAN_DAY儒略日 (公元前 4712-01-01 起算)
WEEK / WEEK_ISO年內週數 (1-54 / 1-53)

實戰常用模式

1. 當前時間轉 UTC

CURRENT TIME - CURRENT TIMEZONE
CURRENT TIMESTAMP - CURRENT TIMEZONE

2. 日期邊界計算

-- 本月第一天
CURRENT DATE - (DAY(CURRENT DATE)-1) DAYS
-- 本月最後一天
(CURRENT DATE - (DAY(CURRENT DATE)-1) DAYS) + 1 MONTH - 1 DAY

3. 精確時間差 UDF

CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)
RETURNS INT
RETURN (DAYS(t1)-DAYS(t2))*86400 + (MIDNIGHT_SECONDS(t1)-MIDNIGHT_SECONDS(t2))@

4. 閏年判斷 UDF

CREATE FUNCTION daysinyear(yr INT)
RETURNS INT
RETURN CASE MOD(yr,400) WHEN 0 THEN 366
       ELSE CASE MOD(yr,4) WHEN 0 THEN CASE MOD(yr,100) WHEN 0 THEN 365 ELSE 366 END
       ELSE 365 END END@

5. 字符串拼接報表

SELECT 'Report Date: ' || CHAR(CURRENT DATE) FROM SYSIBM.SYSDUMMY1

最佳實踐提醒

  • 優先使用 精確運算 (DAYS + MIDNIGHT_SECONDS) 而非 TIMESTAMPDIFF 進行業務級時間差計算
  • 格式化輸出用 TO_CHAR 明確模板,避免隱式轉換隨地區設定變化
  • 解析輸入嚴格指定模板 TO_DATE('2024-01-15','YYYY-MM-DD')
  • 將常用邏輯封裝為 UDF,統一口徑、提升可維護性
  • 注意 DAYOFWEEK (美制) 與 DAYOFWEEK_ISO (國際制) 差異,業務邏輯選對一個
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved