2012-11-22 20 views

Trả lời

11

Giả định được thực hiện rằng 08-APR-13 là một chuỗi trong trường hợp của bạn. Vì vậy, bạn cần chuyển đổi nó thành date bằng cách sử dụng chức năng to_date và sau đó chỉ cần trừ 100 chữ.

  • 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 
    

HOẶC

 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

này có thể được thực hiện bằng cách chỉ chọn truy vấn trừ khi Nicholas Krasnov nói .. IN pl/sql bằng cách tạo hàm DATE_AGO có tham số đầu vào là ngày và số ngày bạn cần trừ ...

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;