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

DB2 日期時間函數完全指南:運算、格式轉換、差值計算與閏年判斷

     編輯:DB2 教學

基礎:取得當前日期時間

-- 標準查詢方式
SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1;
SELECT CURRENT TIME FROM SYSIBM.SYSDUMMY1;
SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1;

-- CLP 快捷方式
VALUES CURRENT DATE;
VALUES CURRENT TIME;
VALUES CURRENT TIMESTAMP;

SYSIBM.SYSDUMMY1 為內存虛擬表,專供標量函數/暫存器求值。

時區轉換:調整至 GMT/UTC

CURRENT TIME - CURRENT TIMEZONE
CURRENT TIMESTAMP - CURRENT TIMEZONE

元件擷取

YEAR(CURRENT TIMESTAMP), MONTH(...), DAY(...)
HOUR(...), MINUTE(...), SECOND(...), MICROSECOND(...)
DATE(CURRENT TIMESTAMP)  -- 只要日期部份
TIME(CURRENT TIMESTAMP)  -- 只要時間部份

自然語言式日期運算


CURRENT DATE + 1 YEAR
CURRENT DATE + 3 YEARS + 2 MONTHS + 15 DAYS
CURRENT TIME + 5 HOURS - 3 MINUTES + 10 SECONDS

兩日期相差天數

DAYS(CURRENT DATE) - DAYS(DATE('1999-10-22'))

去除 Timestamp 微秒部份

CURRENT TIMESTAMP - MICROSECOND(CURRENT TIMESTAMP) MICROSECONDS

字串與日期時間互轉


-- 日期/時間/時間戳 → 字串
CHAR(CURRENT DATE)
CHAR(CURRENT TIME)
CHAR(CURRENT DATE + 12 HOURS)

-- 字串 → 日期/時間/時間戳 (支援多種格式)
TIMESTAMP('2002-10-20-12.00.00.000000')
TIMESTAMP('2002-10-20 12:00:00')
DATE('2002-10-20')
DATE('10/20/2002')
TIME('12:00:00')
TIME('12.00.00')

⚠️ 陷阱:遺漏引號導致邏輯錯誤


SELECT DATE(2001-09-22) FROM SYSIBM.SYSDUMMY1;  -- 錯誤!無引號視為數值運算
-- 結果:05/24/0006  (相差近 2000 年)

原因:無引號時 DB2 視為數值 (2001-9)-22 = 1970,解釋為「第 1970 天」(從 0001-01-01 起算)。務必加引號:DATE('2001-09-22')。

高精度時間差計算

內建 TIMESTAMPDIFF 為近似值 (假設每月 30 天、不考慮閏年)。精確到秒的自訂函數:


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

閏年判斷與年天數函數


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 @

用法:VALUES DAYSINYEAR(2024) → 366。

TIMESTAMPDIFF 單位對照表

數值單位
1微秒
2秒
4分
8時
16天
32週
64月
128季
256年
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved