我需要在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';
请任何帮助将非常感谢。感谢
答案 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。