2016-05-24 24 views
0

所有可能的日期的名單上有presentation表包括:獲取基於特定的日子[的Oracle 11g]

ID  DAY   START  END  STARTDATE  ENDDATE 
622 Monday  12:00:00 02:00:00 01-05-2016  04-06-2016 
623 Tuesday 12:00:00 02:00:00 01-05-2016  04-06-2016 
624 Wednesday 08:00:00 10:00:00 01-05-2016  04-06-2016 
625 Thursday 10:00:00 12:00:00 01-05-2016  04-06-2016 

我想所有可能的日期列出下來從STARTDATEENDDATE。我試過了一個正在工作的查詢,只是它會爲每個ID列出所有可能的日期。我可能只需要一個ID,因爲所有行基本上都具有相同的日期。

查詢:

select 
    A.PRESENTATIONID, 
    A.PRESENTATIONDATESTART+delta dt 
from 
    PRESENTATION A, 
    (
    select level-1 as delta 
    from dual 
    connect by level-1 <= (
     select max(PRESENTATIONDATEEND- PRESENTATIONDATESTART) from PRESENTATION 
    ) 
) 
where A.PRESENTATIONDATESTART+delta <= A.PRESENTATIONDATEEND 
order by 1,2; 

結果:

622 01-05-2016 12:00:00 //startdate 
..... 
622 03-06-2016 12:00:00 
622 04-06-2016 12:00:00 //enddate 
..... 
625 04-06-2016 12:00:00 

結果是非常繁瑣!

我想列出一天中的日期存儲在我的presentation表中。例如,在presentation表中,日期爲星期一,星期二,星期三和星期四。可能的結果將是:

MONDAY 
02-05-2016 12:00:00 
09-05-2016 12:00:00 
16-05-2016 12:00:00 
23-05-2016 12:00:00 
30-05-2016 12:00:00 

TUESDAY 
03-05-2016 12:00:00 
10-05-2016 12:00:00 
17-05-2016 12:00:00 
24-05-2016 12:00:00 
31-05-2016 12:00:00 
.... until THURSDAY 

在路上來解釋,在這個問題上,我想排除日期爲週五,週六和週日。可能嗎?

UPDATE

新建查詢:

select 
    A.PRESENTATIONID, 
    A.PRESENTATIONDAY, 
    A.PRESENTATIONDATESTART+delta dt 
from 
    PRESENTATION A, 
    (
    select level-1 as delta 
    from dual 
    connect by level-1 <= (
     select max(PRESENTATIONDATEEND- PRESENTATIONDATESTART) from PRESENTATION 
    ) 
) 
where A.PRESENTATIONDATESTART+delta <= A.PRESENTATIONDATEEND 
and 
    a.presentationday = trim(to_char(A.PRESENTATIONDATESTART+delta, 'Day')) 
order by 1,2,3; 

結果:

622 Monday 02-05-2016 12:00:00 
622 Monday 09-05-2016 12:00:00 
622 Monday 16-05-2016 12:00:00 
622 Monday 23-05-2016 12:00:00 
622 Monday 30-05-2016 12:00:00 
623 Tuesday 03-05-2016 12:00:00 
623 Tuesday 10-05-2016 12:00:00 
623 Tuesday 17-05-2016 12:00:00 
623 Tuesday 24-05-2016 12:00:00 
623 Tuesday 31-05-2016 12:00:00 
624 Wednesday 04-05-2016 12:00:00 
624 Wednesday 11-05-2016 12:00:00 
624 Wednesday 18-05-2016 12:00:00 
624 Wednesday 25-05-2016 12:00:00 
624 Wednesday 01-06-2016 12:00:00 
625 Thursday 05-05-2016 12:00:00 
625 Thursday 12-05-2016 12:00:00 
625 Thursday 19-05-2016 12:00:00 
625 Thursday 26-05-2016 12:00:00 
625 Thursday 02-06-2016 12:00:00 

您可以檢查日曆看是否天和日期是匹配:d再次謝謝@ dcieslak!

+0

當你向他們展示他們時,你不是故意在你的輸出中輸入MONDAY和TUESDAY,是嗎?您是否希望在單獨的專欄中顯示一週中的哪一天? – mathguy

+0

不是的。這只是爲了讓人們明白我試圖達到的目標。哈哈@mathguy – Mong2203

回答

1

添加到您的查詢:

and 
    a.day = trim(to_char(A.PRESENTATIONDATESTART+delta, 'Day')) 

它將刪除日子,不等於你DAY列。 trim對'Day'非常重要,因爲我們想擺脫前後空格。

+0

我需要用什麼來代替''Day''嗎?它是什麼? @dcieslak – Mong2203

+0

忽略我的第一條評論。我只是想出瞭解決方案:D非常感謝!但是我還有另外一個問題...... – Mong2203

+0

但是......但是......從最初的問題來看,接受的答案如何達到要求,日期應該只顯示一次,而不是每個ID都重複?旺?你是否改變了主意,現在的要求是不同的? – mathguy