日期:2014-05-17 浏览次数:20856 次
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;