PL/SQL How to get X day ago from a Date as Date?

oracle, oracle-sqldeveloper, oracle11g, plsql, sql

Solution

Assumption was made that the `08-APR-13` is a string in your situation. So you need convert it to `date` using `to_date` function, and then simply subtract 100 literal.

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

OR

     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

Problem

I want to get 100 days ago from 08-APR-13, as date. How to do it with pl/sql?

Original source