[英]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.