2014-12-03 53 views
0

我想,甲骨文把星期方式如下:設置從當年的第一天直到今年接下來的星期一的第一個星期

-The星期週一
開始今年-The第一週從當年的第一天,直到下一個星期一

因此,對於2015年將是

01-JAN-2015(星期四)將1
02-JAN-2015(星期五)將1
2015年1月3日(星期六)將是1
04-JAN-2015(星期日)將1
05-JAN-2015(星期一)將2
06 - 2015年(星期二)將2

對於2017年將是

01-JAN-2017(星期日)將1
02-JAN-2017(星期一)將2
03-JAN-2017(星期二)將2
04-JAN-2017(星期三)將be 2

等....

我需要爲今年的記數,從而會去1至53-54

+0

你可以用日期算法做到這一點,但我寧願使用日曆表。 – 2014-12-03 17:27:15

+0

你需要第一週的部分時間嗎?或者它可能包含前一年的最後幾天?即:第一週是2014年1月1日至2014年1月5日或2013年12月30日至2014年1月5日? – 2014-12-03 18:57:15

+0

不真的在乎它包含前一年的日子,只要我提到的兩個條件都滿足 – elvainch 2014-12-03 19:08:04

回答

1

算術的一點點可能會做的伎倆(假設d是你日期):

select TRUNC((case to_char(d, 'DY') 
      when 'MON' then 6 
      when 'TUE' then 5 
      when 'WED' then 4 
      when 'THU' then 3 
      when 'FRI' then 2 
      when 'SAT' then 1 
      when 'SUN' then 0 
     end + to_number(to_char(d, 'DDD'))-1)/7)+1 
from v; 
  • case聲明將根據星期幾的日期建立偏移量
  • 下一頁我添加當天的日期
  • 然後我用7分結果爲週數(從0開始)
  • 最後,+1開始編號周在1

請花一些時間與它進行實驗http://sqlfiddle.com/#!4/d41d8/38236檢查我沒有犯一個愚蠢的錯誤,因爲我沒有時間仔細測試它。對不起...

+0

偉大的工程,偉大的公式! – elvainch 2014-12-04 12:40:43

1

使用ISO週日期標準:「IW」。

2014年1月1日是星期三實際上,這樣:

select 
    to_number(to_char(date'2014-01-05', 'iw')) as weeknum, 
    to_char(date'2014-01-05', 'Day') as day 
from dual; 

    WEEKNUM DAY 
----------- --------- 
      1 Sunday 

select 
    to_number(to_char(date'2014-01-06', 'iw')) as weeknum, 
    to_char(date'2014-01-06', 'Day') as day 
from dual; 

    WEEKNUM DAY 
----------- --------- 
      2 Monday 
+0

我查詢2-jan-2017是星期一,會給我爲weeknum 1所以不好,我想要一個2結果 – elvainch 2014-12-03 19:01:04

相關問題