程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2時間日期函數

DB2時間日期函數

編輯:DB2教程


DB2時間日期函數   1 、要使用 SQL  獲得當前的日期、時間及時間戳記,參考適當的 DB2  寄存器:   www.2cto.com   SELECT current date FROM sysibm.sysdummy1 SELECT current time FROM sysibm.sysdummy1 SELECT current timestamp FROM sysibm.sysdummy1      說明:ysibm.sysdummy1 表是一個特殊的內存中的表,用它可以發現如上面演示的 DB2  寄存器的值     2 、日期函數:給定了日期、時間或時間戳記,則使用適當的函數可以單獨抽取出(如果適用的話)年、月、日、時、分、秒及微秒各部分:     YEAR (current timestamp)   MONTH (current timestamp)   DAY (current timestamp)   HOUR (current timestamp)   MINUTE (current timestamp)   SECOND (current timestamp)   MICROSECOND (current timestamp)    從時間戳記單獨抽取出日期和時間也非常簡單:   www.2cto.com     DATE (current timestamp)   TIME (current timestamp)    3 、還可以使用英語來執行日期和時間計算:      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'))     如果想將日期或時間值與其它文本相銜接,那麼需要先將該值轉換成字符串。為此,只要使用 CHAR()  函數:     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')     TIMESTAMP() 、DATE()  和 TIME()  函數接受更多種格式。   警告:  摘自 DB2 UDB V8.1 SQL Cookbook ,作者 Graeme Birchall 如果你在日期函數中偶然地遺漏了引號,那將如何呢?結論是函數會工作,但結果會出錯:       SELECT DATE(2001-09-22) FROM SYSIBM.SYSDUMMY1;    結果:   05/24/0006         為什麼會產生將近 2000  年的差距呢?當 DATE  函數得到了一個字符串作為輸入參數的時候,它會假定這是一個有效的 DB2  日期的表示,並對其進行適當地轉換。相反,當輸入參數是數字類型時,函數會假定該參數值減 1  等於距離公元第一天(0001-01-01 )的天數。在上面的例子中,我們的輸入是 2001-09-22 ,被理解為 (2001-9)-22,  等於 1970  天,於是該函數被理解為 DATE(1970) 。    日期函數   有時,您需要知道兩個時間戳記之間的時差。為此,DB2  提供了一個名為 TIMESTAMPDIFF()  的內置函數。但該函數返回的是近似值,因為它不考慮閏年,而且假設每個月只有 30  天。以下示例描述了如何得到兩個日期的近似時差:   timestampdiff (<n>, char(timestamp('2002-11-30-00.00.00')-timestamp('2002-11-08-00.00.00')))   對於 <n> ,可以使用以下各值來替代,以指出結果的時間單位: ·         1 =  秒的小數部分  ·         2 =  秒  ·         4 =  分  ·         8 =  時 ·         16 =  天  ·         32 =  周  ·         64 =  月  ·         128 =  季度  ·         256 =  年    當日期很接近時使用 timestampdiff()  比日期相差很大時精確。如果需要進行更精確的計算,可以使用以下方法來確定時差(按秒計):   (DAYS(t1) - DAYS(t2)) * 86400 + (MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2)) 為方便起見,還可以對上面的方法創建 SQL  用戶定義的函數:   CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)     RETURNS INT   RETURN (   (DAYS(t1) - DAYS(t2)) * 86400 +    (MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))   )   如果需要確定給定年份是否是閏年,以下是一個很有用的 SQL  函數,您可以創建它來確定給定年份的天數:   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)    改變日期格式     在日期的表示方面,這也是我經常碰到的一個問題。用於日期的缺省格式由數據庫的地區代碼決定,該代碼在數據庫創建的時候被指定。例如,我在創建數據庫時使用 territory=US  來定義地區代碼,則日期的格式就會像下面的樣子:    values current date    1   www.2cto.com   ---------- 05/30/2003   1 record(s) selected.     也就是說,日期的格式是 MM/DD/YYYY.  如果想要改變這種格式,你可以通過綁定特定的 DB2  工具包來實現.  其他被支持的日期格式包括:    DEF   使用與地區代碼相匹配的日期和時間格式。   EUR   使用歐洲日期和時間的 IBM  標准格式。   ISO   使用國際標准組織(ISO )制訂的日期和時間格式。   JIS   使用日本工業標准的日期和時間格式。    www.2cto.com   LOC   使用與數據庫地區代碼相匹配的本地日期和時間格式。   USA   使用美國日期和時間的 IBM  標准格式。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved