PLSQL如何判斷第幾週的資料(含跨年週數、起迄日期)問題之教學文賈奈!

腫魔沒人留言?快點下去搶頭香啊!

一般日期週數

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')

參考資料

  1. stackoverflow的How to extract week number in sql
  2. TechOnTheNet: Oracle / PLSQL: TRUNC Function (with dates)
0 0 vote
Article Rating
訂閱(Subscribe)
來自於(Notify of)
0 Comments
Inline Feedbacks
View all comments