簡體   English   中英

計算DB2中兩個日期之間的天數?

[英]Calculating how many days are between two dates in DB2?

我需要在DB2中的兩個日期之間獲得差異。 我嘗試了幾個不同的查詢,但似乎沒有任何工作。 基本上我需要得到的是這樣的東西。

 SELECT DAYS (CURRENT DATE) - DAYS (DATE(CHDLM)) FROM CHCART00 WHERE CHSTAT = '05';

我知道如果我刪除CHDLM並指定像“2012-02-20”這樣的日期它可以工作,但我需要能夠在表格中針對該字段運行它。 我也試過這個由朋友給我的查詢也沒有工作。

 select days (current date) - days (date(select concat(concat(concat(concat(left(a2.chdlm,4),'-'),substr(a2.chdlm,4,2)),'-'),right(a2.chdlm,2))) from sysibm.sysdummy1 a1, chcart00 a2 where chstat = '05';

請任何幫助將非常感謝。 謝謝

我認為@Siva是在正確的軌道上(使用DAYS() ),但嵌套的CONCAT()讓我頭暈目眩。 這是我的看法。
哦,引用sysdummy1沒有意義,因為你需要從表中拉出來。
另外,不要使用隱式連接語法 - 它被認為是SQL反模式。

為了便於閱讀,我將CTE中的日期轉換包裝起來,但沒有什么能阻止你進行內聯。

WITH Converted (convertedDate) as (SELECT DATE(SUBSTR(chdlm, 1, 4) || '-' ||
                                               SUBSTR(chdlm, 5, 2) || '-' ||    
                                               SUBSTR(chdlm, 7, 2))
                                   FROM Chcart00
                                   WHERE chstat = '05')

SELECT DAYS(CURRENT_DATE) - DAYS(convertedDate)
FROM Converted

我在Java桌面應用程序中遇到了Derby IBM DB2嵌入式數據庫中的相同問題,經過一天的搜索后我終於找到了它是如何完成的:

SELECT days (table1.datecolomn) - days (current date) FROM table1 WHERE days (table1.datecolomn) - days (current date) > 5

有關更多信息, 請查看此站點

values timestampdiff (16, char( 
    timestamp(current timestamp + 1 year + 2 month - 3 day)- 
    timestamp(current timestamp)))
1
=
422



values timestampdiff (16, char( 
    timestamp('2012-03-08-00.00.00')- 
    timestamp('2011-12-08-00.00.00')))
1
=
90

---------- 由Galador編輯

SELECT TIMESTAMPDIFF(16, CHAR(CURRENT TIMESTAMP - TIMESTAMP_FORMAT(CHDLM, 'YYYYMMDD'))
FROM CHCART00
WHERE CHSTAT = '05'

編輯

正如X-Zero所指出的,該函數僅返回估計值。 這是真的。 為了獲得准確的結果,我將使用以下內容來獲得兩個日期a和b之間的天數差異:

SELECT days (current date) - days (date(TIMESTAMP_FORMAT(CHDLM, 'YYYYMMDD')))
FROM CHCART00 
WHERE CHSTAT = '05';

,right(a2.chdlm,2)))) from sysibm.sysdummy1 a1,似乎有一個,right(a2.chdlm,2)))) from sysibm.sysdummy1 a1,大括號,right(a2.chdlm,2)))) from sysibm.sysdummy1 a1,

所以你的查詢將是

select days(current date) - days(date(select concat(concat(concat(concat(left(a2.chdlm,4),'-'),substr(a2.chdlm,4,2)),'-'),right(a2.chdlm,2)))) from sysibm.sysdummy1 a1, chcart00 a2 where chstat = '05';

不會只是:

SELECT CURRENT_DATE - CHDLM FROM CHCART00 WHERE CHSTAT = '05';

如果我理解日期算術在DB2中的工作原理,那應該返回兩個日期之間的天數。

如果CHDLM不是日期,則必須將其轉換為一個日期。 根據IBM的說法,DATE()函數對於yyyymmdd格式是不夠的,但是如果你可以這樣格式化它會起作用:yyyy-mm-dd。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM