/***********************************************************************
--IBM DB2學習筆記-1:日期以及時間的使用
--彭建軍
--2005-12-22 9:56
--測試環境:DB2 UDB V8.2
--適用于 IBM DB2 UDB for Linux、UNIX 和 Windows
--說明:本文介紹了DB2日期以及時間的絕大部分應用
--歡迎轉載,但請注明出處。
***********************************************************************/

首先要說的廢話是:看完本文后大家會發現,DB2中的日期和時間處理非常簡單也非常靈活!
本文中的語句都經過測試,大家可以在命令編輯器中執行以查看結果,筆者的結果集僅供參考。

1、DB2中日期、時間寄存器的使用

--取日期
SELECT CURRENT DATE FROM sysibm.sysdummy1;
--返回數據類型:DATE
--結果集(YYYY-MM-DD): 2005-12-22

--取時間
SELECT CURRENT TIME FROM sysibm.sysdummy1;
--返回數據類型:TIME
--結果集(HH-MM-SS): 10:10:21

--取時間戳記
SELECT CURRENT TIMESTAMP FROM sysibm.sysdummy1;
--返回數據類型:TIMESTAMP
--結果集(YYYY-MM-DD HH-MM-SS XXXXXX): 2005-12-22 10:10:22 187002

說明:sysibm.sysdummy1表是一個特殊的內存中的表,專門用于存儲系統日期和時間。
推薦大家使用 VALUES 函數直接來進行操作。
以上的語句可以改寫為:

--取日期
VALUES CURRENT DATE;
--取時間
VALUES CURRENT TIME;
--取時間戳記
VALUES CURRENT TIMESTAMP;

2、DB2中日期、時間的常用函數介紹

--取年份
VALUES YEAR(CURRENT TIMESTAMP);
--返回值:2005

--取月份
VALUES MONTH(CURRENT TIMESTAMP);
--返回值:12

--取天
VALUES DAY(CURRENT TIMESTAMP);
--返回值:22

--取星期
VALUES DAYOFWEEK(CURRENT TIMESTAMP);
--返回值:5
--說明:取值范圍為1-7,1代表星期日,所以今天是星期四,得出的值為5!

VALUES? DAYNAME(CURRENT TIMESTAMP);
--返回值:星期五

--取小時
VALUES HOUR(CURRENT TIMESTAMP);
--返回值:10

--取分鐘
VALUES MINUTE(CURRENT TIMESTAMP);
--返回值:27

--取秒
VALUES SECOND(CURRENT TIMESTAMP);
--返回值:08

--取毫秒
VALUES MICROSECOND(CURRENT TIMESTAMP);
--返回值:890001

說明:以上函數可以直接供大家在存儲過程以及自定義函數或者觸發器中直接調用,所有返回類型均為 INTEGER

--取日期
VALUES DATE(CURRENT TIMESTAMP);
--返回數據類型:DATE
--返回值:2005-12-22

--取時間
VALUES TIME(CURRENT TIMESTAMP);
--返回數據類型:TIME
--返回值:10:30:48

3、DB2中日期、時間的計算

--取明年的今天
VALUES CURRENT DATE + 1 YEAR;
--返回值:2006-12-12

--取前年的今天(兩種寫法都合法)
VALUES CURRENT DATE - 2 YEAR;
VALUES CURRENT DATE - 2 YEARS;
--返回值:2003-12-12

--取下一個小時后的時間
VALUES CURRENT TIME + 1 HOUR;
--返回值:11:38:25

--混合應用的示例1
VALUES CURRENT DATE + 2 YEARS - 1 MONTH + 10 DAYS;
--返回值:2007-12-2(筆者的當前日期為:2005-12-22,大家可以自己計算一下)

--混合應用的示例2
VALUES CURRENT TIME + 5 HOURS - 3 MINUTES + 10 SECONDS;
--返回值:15:39:22(筆者的當前時間為:10:42:12,大家可以自己計算一下)

--計算兩個日期之間的間隔天數
VALUES DAYS(CURRENT DATE) - DAYS('2005-01-01');
--返回值:355

說明:DB2中日期、時間的計算非常的靈活,大家可以根據實際需求進行自己的計算

4、DB2中日期、時間的類型轉換

--將日期、時間類型轉換為字符串型
VALUES CHAR(CURRENT DATE);
VALUES CHAR(CURRENT TIMESTAMP);

--將字符串型轉換為日期、時間類型
VALUES TIMESTAMP ('2005-12-22-12.00.00.000000');
VALUES TIMESTAMP ('2005-12-22 12:00:00');
VALUES DATE ('2005-12-22');
VALUES DATE ('12/22/2005');--注意:該格式為(MM/DD/YYYY)
VALUES TIME ('12:00:00');
VALUES TIME ('12.00.00');

說明:在實際應用中,TIMESTAMP()、DATE() 和 TIME() 函數接受更多種格式。其他的格式有興趣的讀者可以自己去發現。

--注意:DATE(2005-12-22)和DATE('2005-12-22')雖然都是合法的,但是結果不同!其實DATE(2005-12-22)等價與DATE(1971),具體原因這里就不詳細講述了。

VALUES DATE(2005-12-22)
--返回值:0006-5-25

VALUES DATE('2005-12-22')
--返回值:2005-12-22

5、DB2中日期、時間的補充說明

DAYNAME
返回一個大小寫混合的字符串,對于參數的日部分,用星期表示這一天的名稱(例如,星期四)。

DAYOFWEEK
返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期日。

DAYOFWEEK_ISO
返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期一。

DAYOFYEAR
返回參數中一年中的第幾天,用范圍在 1-366 的整數值表示。

DAYS
返回日期的整數表示。

JULIAN_DAY
返回從公元前 4712 年 1 月 1 日(儒略日歷的開始日期)到參數中指定日期值之間的天數,用整數值表示。

MIDNIGHT_SECONDS
返回午夜和參數中指定的時間值之間的秒數,用范圍在 0 到 86400 之間的整數值表示。

MONTHNAME
對于參數的月部分的月份,返回一個大小寫混合的字符串(例如,January)。

TIMESTAMP_ISO
根據日期、時間或時間戳記參數而返回一個時間戳記值。

TIMESTAMP_FORMAT
從已使用字符模板解釋的字符串返回時間戳記。

TIMESTAMPDIFF
根據兩個時間戳記之間的時差,返回由第一個參數定義的類型表示的估計時差。

TO_CHAR
返回已用字符模板進行格式化的時間戳記的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同義詞。

TO_DATE
從已使用字符模板解釋過的字符串返回時間戳記。TO_DATE 是 TIMESTAMP_FORMAT 的同義詞。

WEEK
返回參數中一年的第幾周,用范圍在 1-54 的整數值表示。以星期日作為一周的開始。

WEEK_ISO
返回參數中一年的第幾周,用范圍在 1-53 的整數值表示。

說明:在DB2中,日期、時間的函數還有很多,上面只列舉了一些常用的函數,如果這些函數不能實現讀者的需求,可以自己編寫自定義函數。

相信各位讀者看完這篇文章之后會對DB2的時間以及日期計算有全新的認識,非常簡單,沒有騙你哦!

感謝IBM 工程師 Paul Yi,是您的文章讓我獲益匪淺。



?

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=559016