2010年1月20日 星期三

[Oracle]Week的時間區間

日前有一個需求為呈現從今日往前推53週的日期,列出每週的週別與開始與結束日期。每週的開始日期為週二。

呈現如下:


















解法一:
select to_char(start_date, 'iyyy') || 'W' || to_char(start_date, 'iw') week_no,
       to_char(start_date, 'yyyy/mm/dd') start_date,
       to_char(end_date, 'yyyy/mm/dd') end_date
  from (select next_day(sysdate, 3) - rn * 7 start_date,
               (next_day(sysdate, 3) - (rn - 1) * 7) - 1 end_date
          from (select rownum rn from dual connect by level <= 53)) 
重點說明:
  1. 使用connect by level <= 53 去生出53筆資料 ,rownum依序呈現1,2,3,4....等數據。
  2. 使用next_day去指定週二為一週的起始日期。
  3. 使用to_char()參數選用iyyy與iw去指定使用iso的週別定義方式轉換週別。

2 則留言: