一般日期週數
select to_char(to_date('20170101', 'yyyymmdd'), 'WW') --顯示20170101屬於2017年度的第幾週,結果會是01 from dual
然後再使用group by就可以將同一週的資料歸納在一起,
考慮跨年度
必須改用ISO week date以參數 ‘IW’ 顯示,如:
select to_char(to_date('20170101', 'yyyymmdd'), 'IW') --如果20170101並非星期一,則併入上一年度計算,結果會是52 from dual
至於如果要看是當月的第幾週,就用參數 ‘W’ 即可。
前一週到前三週的每週資料筆數
以query資料當下的系統時間看,如下(以ISO week date為例):
select to_char(some_date, 'IW'), count(*) from some_table where to_number(to_char(some_date, 'IW')) between to_number(to_char(sysdate, 'IW')) - 1 and to_number(to_char(sysdate, 'IW')) - 3 group by to_number(to_char(some_date, 'IW'))
自動判斷起迄日期
畢竟很少人能一眼看出第幾週的起迄日期,加入以下程式碼即可自動產生:
select to_char(trunc(some_date, 'IW'), 'yyyymmdd') || '~' || to_char(trunc(some_date, 'IW')+6, 'yyyymmdd')
參考資料
- stackoverflow的How to extract week number in sql
- TechOnTheNet: Oracle / PLSQL: TRUNC Function (with dates)