Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: Date Issue - Just shoot me again please

Re: Date Issue - Just shoot me again please

From: plopez <plopez_at_garbage_stringuwyo.edu>
Date: Fri, 31 Mar 2000 12:34:55 -0700
Message-ID: <38E4FDDF.AA5116D6@garbage_stringuwyo.edu>


worked fine on my system.
I compiled:

        CREATE OR REPLACE
          FUNCTION get_PreviousWeekDay(d_date IN DATE) RETURN DATE IS
                  d_ReturnDate    DATE;
                  n_DayOfWeek     NUMBER;
          BEGIN

                  SELECT  TO_CHAR(d_date, 'D')
                  INTO    n_DayOfWeek
                  FROM    dual;

                  IF n_DayOfWeek = 2 THEN
                          d_ReturnDate := d_Date - 3;
                  ELSIF n_DayOfWeek = 1 THEN
                          d_ReturnDate := d_Date - 2;
                  ELSE
                          d_ReturnDate := d_Date - 1;
                  END IF;


                  RETURN(d_ReturnDate);

          END get_PreviousWeekDay;

Then I built a proc to actually call it:

create or replace procedure test_date
is
begin
 declare
 return_date date;
begin
 return_date:=get_PreviousWeekDay(sysdate-4);  dbms_output.put_line(to_char(return_date,'YYYYMMDD')); end;
end test_date;

Then

SQLWKS> execute test_date
Statement processed.
20000324

I think that should be the correct date.

Moore wrote:

> What in the h e l l? (again).
>
> Select to_char(sysdate, 'D') from dual; Returns
>
> TO_CHAR(SYSDATE,'D')
> ---------------------
> 6
>
> (Today is Friday, March 31).
>
> Select sysdate - 3 from dual; Returns
>
> SYSDATE-3
> ---------
> 28-MAR-00
>
> So why in the maddening hell will the following not work?
>
> CREATE OR REPLACE
> FUNCTION get_PreviousWeekDay(d_date IN DATE) RETURN DATE IS
> d_ReturnDate DATE;
> n_DayOfWeek NUMBER;
> BEGIN
>
> SELECT TO_CHAR(d_date, 'D')
> INTO n_DayOfWeek
> FROM dual;
>
> IF n_DayOfWeek = 2 THEN
> d_ReturnDate := d_Date - 3;
> ELSIF n_DayOfWeek = 1 THEN
> d_ReturnDate := d_Date - 2;
> ELSE
> d_ReturnDate := d_Date - 1;
> END IF;
>
>
> RETURN(d_ReturnDate);
>
> END get_PreviousWeekDay;
>
> I am sorry, I will state once again, working with dates in Oracle is one
> of the most royal pains that I have ever encountered in my IT life. I have
> far less trouble making API calls!
Received on Fri Mar 31 2000 - 13:34:55 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US