/***********************************************************************
--IBM DB2學(xué)習(xí)筆記-1:日期以及時(shí)間的使用
--彭建軍
--2005-12-22 9:56
--測(cè)試環(huán)境:DB2 UDB V8.2
--適用于 IBM DB2 UDB for Linux、UNIX 和 Windows
--說明:本文介紹了DB2日期以及時(shí)間的絕大部分應(yīng)用
--歡迎轉(zhuǎn)載,但請(qǐng)注明出處。
***********************************************************************/
首先要說的廢話是:看完本文后大家會(huì)發(fā)現(xiàn),DB2中的日期和時(shí)間處理非常簡(jiǎn)單也非常靈活!
本文中的語句都經(jīng)過測(cè)試,大家可以在命令編輯器中執(zhí)行以查看結(jié)果,筆者的結(jié)果集僅供參考。
1、DB2中日期、時(shí)間寄存器的使用
--取日期
SELECT CURRENT DATE FROM sysibm.sysdummy1;
--返回?cái)?shù)據(jù)類型:DATE
--結(jié)果集(YYYY-MM-DD): 2005-12-22
--取時(shí)間
SELECT CURRENT TIME FROM sysibm.sysdummy1;
--返回?cái)?shù)據(jù)類型:TIME
--結(jié)果集(HH-MM-SS): 10:10:21
--取時(shí)間戳記
SELECT CURRENT TIMESTAMP FROM sysibm.sysdummy1;
--返回?cái)?shù)據(jù)類型:TIMESTAMP
--結(jié)果集(YYYY-MM-DD HH-MM-SS XXXXXX): 2005-12-22 10:10:22 187002
說明:sysibm.sysdummy1表是一個(gè)特殊的內(nèi)存中的表,專門用于存儲(chǔ)系統(tǒng)日期和時(shí)間。
推薦大家使用 VALUES 函數(shù)直接來進(jìn)行操作。
以上的語句可以改寫為:
--取日期
VALUES CURRENT DATE;
--取時(shí)間
VALUES CURRENT TIME;
--取時(shí)間戳記
VALUES CURRENT TIMESTAMP;
2、DB2中日期、時(shí)間的常用函數(shù)介紹
--取年份
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);
--返回值:星期五
--取小時(shí)
VALUES HOUR(CURRENT TIMESTAMP);
--返回值:10
--取分鐘
VALUES MINUTE(CURRENT TIMESTAMP);
--返回值:27
--取秒
VALUES SECOND(CURRENT TIMESTAMP);
--返回值:08
--取毫秒
VALUES MICROSECOND(CURRENT TIMESTAMP);
--返回值:890001
說明:以上函數(shù)可以直接供大家在存儲(chǔ)過程以及自定義函數(shù)或者觸發(fā)器中直接調(diào)用,所有返回類型均為 INTEGER
--取日期
VALUES DATE(CURRENT TIMESTAMP);
--返回?cái)?shù)據(jù)類型:DATE
--返回值:2005-12-22
--取時(shí)間
VALUES TIME(CURRENT TIMESTAMP);
--返回?cái)?shù)據(jù)類型:TIME
--返回值:10:30:48
3、DB2中日期、時(shí)間的計(jì)算
--取明年的今天
VALUES CURRENT DATE + 1 YEAR;
--返回值:2006-12-12
--取前年的今天(兩種寫法都合法)
VALUES CURRENT DATE - 2 YEAR;
VALUES CURRENT DATE - 2 YEARS;
--返回值:2003-12-12
--取下一個(gè)小時(shí)后的時(shí)間
VALUES CURRENT TIME + 1 HOUR;
--返回值:11:38:25
--混合應(yīng)用的示例1
VALUES CURRENT DATE + 2 YEARS - 1 MONTH + 10 DAYS;
--返回值:2007-12-2(筆者的當(dāng)前日期為:2005-12-22,大家可以自己計(jì)算一下)
--混合應(yīng)用的示例2
VALUES CURRENT TIME + 5 HOURS - 3 MINUTES + 10 SECONDS;
--返回值:15:39:22(筆者的當(dāng)前時(shí)間為:10:42:12,大家可以自己計(jì)算一下)
--計(jì)算兩個(gè)日期之間的間隔天數(shù)
VALUES DAYS(CURRENT DATE) - DAYS('2005-01-01');
--返回值:355
說明:DB2中日期、時(shí)間的計(jì)算非常的靈活,大家可以根據(jù)實(shí)際需求進(jìn)行自己的計(jì)算
4、DB2中日期、時(shí)間的類型轉(zhuǎn)換
--將日期、時(shí)間類型轉(zhuǎn)換為字符串型
VALUES CHAR(CURRENT DATE);
VALUES CHAR(CURRENT TIMESTAMP);
--將字符串型轉(zhuǎn)換為日期、時(shí)間類型
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');
說明:在實(shí)際應(yīng)用中,TIMESTAMP()、DATE() 和 TIME() 函數(shù)接受更多種格式。其他的格式有興趣的讀者可以自己去發(fā)現(xiàn)。
--注意:DATE(2005-12-22)和DATE('2005-12-22')雖然都是合法的,但是結(jié)果不同!其實(shí)DATE(2005-12-22)等價(jià)與DATE(1971),具體原因這里就不詳細(xì)講述了。
VALUES DATE(2005-12-22)
--返回值:0006-5-25
VALUES DATE('2005-12-22')
--返回值:2005-12-22
5、DB2中日期、時(shí)間的補(bǔ)充說明
DAYNAME
返回一個(gè)大小寫混合的字符串,對(duì)于參數(shù)的日部分,用星期表示這一天的名稱(例如,星期四)。
DAYOFWEEK
返回參數(shù)中的星期幾,用范圍在 1-7 的整數(shù)值表示,其中 1 代表星期日。
DAYOFWEEK_ISO
返回參數(shù)中的星期幾,用范圍在 1-7 的整數(shù)值表示,其中 1 代表星期一。
DAYOFYEAR
返回參數(shù)中一年中的第幾天,用范圍在 1-366 的整數(shù)值表示。
DAYS
返回日期的整數(shù)表示。
JULIAN_DAY
返回從公元前 4712 年 1 月 1 日(儒略日歷的開始日期)到參數(shù)中指定日期值之間的天數(shù),用整數(shù)值表示。
MIDNIGHT_SECONDS
返回午夜和參數(shù)中指定的時(shí)間值之間的秒數(shù),用范圍在 0 到 86400 之間的整數(shù)值表示。
MONTHNAME
對(duì)于參數(shù)的月部分的月份,返回一個(gè)大小寫混合的字符串(例如,January)。
TIMESTAMP_ISO
根據(jù)日期、時(shí)間或時(shí)間戳記參數(shù)而返回一個(gè)時(shí)間戳記值。
TIMESTAMP_FORMAT
從已使用字符模板解釋的字符串返回時(shí)間戳記。
TIMESTAMPDIFF
根據(jù)兩個(gè)時(shí)間戳記之間的時(shí)差,返回由第一個(gè)參數(shù)定義的類型表示的估計(jì)時(shí)差。
TO_CHAR
返回已用字符模板進(jìn)行格式化的時(shí)間戳記的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同義詞。
TO_DATE
從已使用字符模板解釋過的字符串返回時(shí)間戳記。TO_DATE 是 TIMESTAMP_FORMAT 的同義詞。
WEEK
返回參數(shù)中一年的第幾周,用范圍在 1-54 的整數(shù)值表示。以星期日作為一周的開始。
WEEK_ISO
返回參數(shù)中一年的第幾周,用范圍在 1-53 的整數(shù)值表示。
說明:在DB2中,日期、時(shí)間的函數(shù)還有很多,上面只列舉了一些常用的函數(shù),如果這些函數(shù)不能實(shí)現(xiàn)讀者的需求,可以自己編寫自定義函數(shù)。
相信各位讀者看完這篇文章之后會(huì)對(duì)DB2的時(shí)間以及日期計(jì)算有全新的認(rèn)識(shí),非常簡(jiǎn)單,沒有騙你哦!
感謝IBM 工程師 Paul Yi,是您的文章讓我獲益匪淺。
?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=559016