日期:2014-05-17  浏览次数:20768 次

如何取上个月的今天的前一天的问题,有好的办法么,工作中遇到的,请大家帮忙(请想好在回答,有好种情况比如闰月之类)?
请大家帮忙

------解决方案--------------------
再简化一下SQL
SQL code

with t as (
select to_date('20010302','yyyymmdd') d from dual union
select to_date('20010330','yyyymmdd') d from dual union
select to_date('20080302','yyyymmdd') d from dual union
select to_date('20080330','yyyymmdd') d from dual union
select to_date('20110430','yyyymmdd') d from dual union
select to_date('20110630','yyyymmdd') from dual
) 
-- 上半部分是用来构造测试用数据的语句,实际应用中不要引用,只需要引用下半部分即可。范例中表名是T,列名是D。
select case when to_char(add_months( d - 1 , -1),'dd') + 1 = to_char(d,'dd') then add_months( d - 1 , -1)  -- 正常的前1月的日期减1则为结果
            else null -- 前1月该日期的前1天,则返回NULL
       end
from t;