Re: SQL: Listing the dates for a particular day of the week in a range
Date: Tue, 16 Dec 2014 20:45:39 +0000
Message-ID: <CAD6kJfB1kOX=Kwwzv9v6SxZ6rLwRLMukk6ckS5FutZNbg06-VQ_at_mail.gmail.com>
I assumed the date range would only ever be one week just to give you a quick example of NEXT_DAY...
SQL> run test.sql
1 WITH x
2 AS ( (SELECT 'M' date_str, 3 TO_DATE ('12/14/2014', 'MM/DD?YYYY') start_date, 4 TO_DATE ('12/20/2014', 'MM/DD?YYYY') end_date 5 FROM DUAL) 6 UNION 7 (SELECT 'T' date_str, 8 TO_DATE ('12/14/2014', 'MM/DD?YYYY') start_date, 9 TO_DATE ('12/20/2014', 'MM/DD?YYYY') end_date 10 FROM DUAL) 11 UNION 12 (SELECT 'W' date_str, 13 TO_DATE ('12/14/2014', 'MM/DD?YYYY') start_date, 14 TO_DATE ('12/20/2014', 'MM/DD?YYYY') end_date 15 FROM DUAL) 16 UNION 17 (SELECT 'TR' date_str, 18 TO_DATE ('12/14/2014', 'MM/DD?YYYY') start_date, 19 TO_DATE ('12/20/2014', 'MM/DD?YYYY') end_date 20 FROM DUAL) 21 UNION 22 (SELECT 'MWF' date_str, 23 TO_DATE ('12/14/2014', 'MM/DD?YYYY') start_date, 24 TO_DATE ('12/20/2014', 'MM/DD?YYYY') end_date 25 FROM DUAL)), 26 y 27 AS (SELECT 'M' DOW, 'MONDAY' DAY_OF_WEEK FROM DUAL 28 UNION 29 SELECT 'T' DOW, 'TUESDAY' DAY_OF_WEEK FROM DUAL 30 UNION 31 SELECT 'W' DOW, 'WEDNESDAY' DAY_OF_WEEK FROM DUAL 32 UNION 33 SELECT 'R' DOW, 'THURSDAY' DAY_OF_WEEK FROM DUAL 34 UNION 35 SELECT 'F' DOW, 'FRIDAY' DAY_OF_WEEK FROM DUAL) 36 SELECT date_str, 37 start_date, 38 end_date, 39 NEXT_DAY (start_date, y1.day_of_week) first_date, 40 NEXT_DAY (start_date, y2.day_of_week) second_date, 41 NEXT_DAY (start_date, y3.day_of_week) third_date 42 FROM x, 43 y y1, 44 y y2, 45 y y3 46 WHERE SUBSTR (x.date_str, 1, 1) = y1.dow (+) 47 AND SUBSTR (x.date_str, 2, 1) = y2.dow (+) 48* AND SUBSTR (x.date_str, 3, 1) = y3.dow (+)
DAT START_DATE END_DATE FIRST_DATE SECOND_DATE THIRD_DATE
--- ----------- ----------- ----------- ----------- ----------- MWF 14-DEC-2014 20-DEC-2014 15-DEC-2014 17-DEC-2014 19-DEC-2014 M 14-DEC-2014 20-DEC-2014 15-DEC-2014 T 14-DEC-2014 20-DEC-2014 16-DEC-2014 W 14-DEC-2014 20-DEC-2014 17-DEC-2014 TR 14-DEC-2014 20-DEC-2014 16-DEC-2014 18-DEC-2014
On Tue Dec 16 2014 at 1:27:36 PM Ronan Merrick <merrickronan1_at_gmail.com> wrote:
> Hi Anthony,
>
> Do you mean if start date was say, 1st December and end date was say 31st
> December and days was M, you want to return the dates of all the Mondays in
> that set?
>
> Ronan
> On 16 Dec 2014 19:52, "Anthony Ballo" <aballo_at_unm.edu> wrote:
>
>> Hello,
>>
>> I'm working on a scheduling SQL problem. I have a rowset that returns
>> "days" with a "startdate" and "enddate".
>>
>> For example - "days" can have the following values:
>>
>> Days
>> ====
>> M
>> T
>> W
>> TR
>> MWF
>>
>> Where: M = Monday, TR = Tuesday & Thursday and MWF = Monday, Wednesday
>> and Friday.
>>
>> What is the best approach to list the appropriate dates of these days
>> between the "startdate" and "enddate" range? I would mention that
>> "startdate" and "enddate" are the same values for all rows in the rowset if
>> that makes a difference.
>>
>> Any ideas ?
>>
>>
>> Thanks,
>>
>> Anthony
>>
>
-- http://www.freelists.org/webpage/oracle-lReceived on Tue Dec 16 2014 - 21:45:39 CET