2009年12月7日 星期一

[Oracle]無中生有的月曆

本日課題是無中生有的產出一個月份天數的筆數,並且在今天的日期標示Today的字串於第二個欄位。

第一種解法為利用Oracle內建的all_object的sys table去做無中生有的筆數生成。
第二種解法是同事爬出文來的,用於沒有all_object的select的權限時,利用connect by level去生成所需筆數 。


















解法一:
select trunc(sysdate, 'MM') + rn - 1 Calendar,
       decode(trunc(sysdate, 'MM') + rn - 1, trunc(sysdate, 'DD'), 'Today') high_Today
  from (select rownum rn
          from all_objects t
         where rownum <=
               trunc(LAST_DAY(sysdate), 'DD') - trunc(sysdate, 'MM') + 1)
解法二:
select trunc(sysdate, 'MM') + rn - 1 Calendar,
       decode(trunc(sysdate, 'MM') + rn - 1, trunc(sysdate, 'DD'), 'Today') high_Today
  from (select rownum rn
          FROM dual
        CONNECT BY LEVEL <=
                   trunc(LAST_DAY(sysdate), 'DD') - trunc(sysdate, 'MM') + 1)

connect by  為階層相關的函數,詳細Functon使用可看Link

沒有留言:

張貼留言