计算DB2中两个日期之间的天数?

时间:2012-03-02 18:40:06

标签: sql database 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';

请任何帮助将非常感谢。感谢

5 个答案:

答案 0 :(得分:11)

我认为@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

答案 1 :(得分:3)

我在Java桌面应用程序中遇到了Derby IBM DB2嵌入式数据库中的同样问题,经过一天的搜索后我终于找到了它是如何完成的:

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

了解更多信息check this site

答案 2 :(得分:0)

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';

答案 3 :(得分:0)

,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';

答案 4 :(得分:0)

不会只是:

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

如果我理解日期算术在DB2中是如何正常工作的,那应该返回两个日期之间的天数。

如果CHDLM不是日期,则必须将其转换为1。根据IBM的说法,DATE()函数对于yyyymmdd格式是不够的,但是如果你可以像这样格式化它会起作用:yyyy-mm-dd。