2012-11-22 4 views

Antwort

11

Es wurde angenommen, dass die 08-APR-13 eine Zeichenfolge in Ihrer Situation ist. Also müssen Sie es in date mit to_date Funktion konvertieren, und dann einfach 100 literal subtrahieren.

  • SQL

    SQL> select (to_date('08-APR-13', 'DD-MON-RR') - 100) res 
        2 from dual 
        3/
    
    RES 
    ----------- 
    29-12-2012 
    
  • PL/SQL

    SQL> declare 
        2 l_res_date date; 
        3 l_in_date varchar2(11) := '08-APR-13'; 
        4 begin 
        5 select (to_date(l_in_date, 'DD-MON-RR') - 100) 
        6  into l_res_date 
        7 from dual; 
        8 
        9 dbms_output.put_line(to_char(l_res_date, 'dd-mon-yy')); 
        10 end; 
        11/
    
        29-dec-12 
    
        PL/SQL procedure successfully completed 
    

ODER

 SQL> declare 
     2 l_res_date date; 
     3 l_in_date varchar2(11) := '08-APR-13'; 
     4 begin 
     5 
     6 l_res_date := to_date(l_in_date, 'DD-MON-RR') - 100; 
     7 
     8 dbms_output.put_line(to_char(l_res_date, 'dd-mon-yy')); 
     9 end; 
     10/

     29-dec-12 

     PL/SQL procedure successfully completed 
2

dies kann SELECT-Abfrage von nur erfolgen minus als Nicholas Krasnow sagte .. in PL/SQL durch eine Funktion DATE_AGO deren Eingangsparameter zu schaffen ist Datum und die Anzahl der Tage, die Sie subtrahieren müssen ...

create or replace function DATE_AGO(DATE1 date, NUMBER_DAYS number) return date 
    is 
     V_DATE1 date:=DATE1; 
     v_NUMBER_DAYS number:=NUMBER_DAYS; 
    begin 
     V_DATE1:=V_DATE1-v_NUMBER_DAYS; 
     return V_DATE1; 
    when OTHERS then 
     DBMS_OUTPUT.PUT_LINE(SQLCODE); 
    end DATE_AGO; 
    /
    SHOW ERRORS; 


select DATE_AGO('08-APR-13',100) from DUAL; 
Verwandte Themen