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
