摘要:我們今天主要向大家講述的是db2 資料庫並想理解如何操作db2 基礎日期日期與時間的使用,以下就是文章的主要內容的詳細描述。
標籤:db2 基礎日期
此文章主要是為那對 db2 資料庫並想理解如何操作db2 基礎日期日期與時間的使用剛接觸的新手而寫。使用過其它資料庫的大部分人都會很驚喜地發現在 db2 資料庫中操作日期和時間是多麼簡單。
基礎select current date from sysibm.sysdummy1
select current time from sysibm.sysdummy1
select current timestamp from sysibm.sysdummy1
sysibm.sysdummy1 表是乙個特殊的記憶體中的表,用它可以發現如上面演示的 db2 暫存器的值。您也可以使用關鍵字 values 來對暫存器或表示式求值。例如,在 db2 命令列處理器(command line processor,clp)上,以下 sql 語句揭示了類似資訊:
values current date
values current time
values current timestamp
在餘下的示例中,我將只提供函式或表示式,而不再重複 select ... from sysibm.sysdummy1 或使用 values 子句。
要使當前時間或當前時間戳記調整到 gmt/cut,則把當前的時間或時間戳記減去當前時區暫存器:
current time - current timezone
current timestamp - current timezone
給定了日期、時間或時間戳記,則使用適當的函式可以單獨抽取出(如果適用的話)年、月、日、時、分、秒及微秒各部分:
year (current timestamp)
month (current timestamp)
day (current timestamp)
hour (current timestamp)
minute (current timestamp)
second (current timestamp)
microsecond (current timestamp)
從時間戳記單獨抽取出db2 基礎日期日期和時間也非常簡單:
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'))
而以下示例描述了如何獲得微秒部分歸零的當前時間戳記:
current timestamp - microsecond (current timestamp) microseconds
如果想將日期或時間值與其它文字相銜接,那麼需要先將該值轉換成字串。為此,只要使用 char() 函式:
char(current date)
char(current time)
char(current date + 12 hours)
要將字串轉換成db2 基礎日期日期或時間值,可以使用:
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 (see
如果你在日期函式中偶然地遺漏了引號,那將如何呢?結論是函式會工作,但結果會出錯:
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 (, char(
timestamp('2002-11-30-00.00.00')-
timestamp('2002-11-08-00.00.00')))
對於 ,可以使用以下各值來替代,以指出結果的時間單位:
1 = 秒的小數部分
2 = 秒
4 = 分
8 = 時
16 = 天
32 = 周
64 = 月
128 = 季度
256 = 年
當日期很接近時使用 timestampdiff() 比db2 基礎日期日期相差很大時精確。如果需要進行更精確的計算,可以使用以下方法來確定時差(按秒計):
(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)@
db2取資料庫日期時間 DB2日期和時間函式彙總
1.current date獲取當前日期 current time獲取當前時間 current timestamp獲取當前時間戳 含年 月 日 時 分 秒 year 獲取年 month 獲取月 day 獲取日 hour 獲取小時 minute 獲取分鐘 second 獲取秒 date 獲取日期 ti...
DB2 日期時間函式
select current date from sysibm.sysdummy1 select current time from sysibm.sysdummy1 select current timestamp from sysibm.sysdummy1 sysibm.sysdummy1 表是...
DB2 日期時間函式
select current date from sysibm.sysdummy1 select current time from sysibm.sysdummy1 select current timestamp from sysibm.sysdummy1 sysibm.sysdummy1 表是...