嘿伙计们。
嘿伙计们。想象一下这个场景(YYYY / MM / DD):XmlNode
使用PL / SQL可以计算这些重叠日期之间的不同天数吗?
编辑:我的表有2个DATE列,Start_Date和End_Date。我期待的结果是515天((2015/08/10 - 2014/10/03)+(2016/04/28 -2015/09/30))
答案 0 :(得分:4)
您也可以使用纯SQL(不需要PL / SQL):
with
minmax as (select min(start_date) min_dt, max(end_date) max_dt from myTable ),
dates as (
SELECT min_dt + rownum-1 dt1
FROM minmax CONNECT BY ROWNUM <= (max_dt - min_dt +1)
)
select count(*) from dates
where exists(
select 1 from MyTable T2
where dates.dt1 between T2.start_date and T2.end_date )
注意:一个想法,从头开始,没有经过测试。根据需要调整生成日期,包括开始日期和所需长度。
希望它有所帮助。
编辑:使用实际的表格日期
答案 1 :(得分:2)
Oracle 11g R2架构设置:
CREATE TABLE DATES ( start_date, end_date ) AS
SELECT DATE '2015-01-01', DATE '2015-08-10' FROM DUAL
UNION ALL SELECT DATE '2014-10-03', DATE '2015-07-06' FROM DUAL
UNION ALL SELECT DATE '2015-09-30', DATE '2016-04-28' FROM DUAL
查询1 :
SELECT COUNT( DISTINCT COLUMN_VALUE ) AS number_of_days
FROM DATES d,
TABLE(
CAST(
MULTISET(
SELECT d.START_DATE + LEVEL - 1
FROM DUAL
CONNECT BY d.START_DATE + LEVEL - 1 < d.END_DATE
)
AS SYS.ODCIDATELIST
)
)
ORDER BY 1
<强> Results 强>:
| NUMBER_OF_DAYS |
|----------------|
| 522 |
查询2 - 检查:
SELECT DATE '2015-08-10' - DATE '2014-10-03'
+ DATE '2016-04-28' - DATE '2015-09-30'
FROM DUAL
<强> Results 强>:
| DATE'2015-08-10'-DATE'2014-10-03'+DATE'2016-04-28'-DATE'2015-09-30' |
|---------------------------------------------------------------------|
| 522 |