oracle 自然周跨年度 一周分成兩部分

2021-08-24 23:01:49 字數 1591 閱讀 6910

create or replace function udf_weekofyear ( v_date in date ,formate in varchar2 ) return char

asv_ret char(6);

v_ret1 char(2);

v_ret3 number;

begin

v_ret3 := to_char (v_date, 'iw');

if v_ret3 = 1 and to_char (v_date, 'mm') = '12' then --判斷是否是最後乙個月 周次算成下年了第一周

select to_char(decode(sign((v_date

+to_number(decode(to_char(trunc(v_date,'yyyy'),'d'),'1','8',

to_char(trunc(v_date,'yyyy'),'d'))) - 2)

-last_day(v_date)),1,last_day(v_date),

(v_date

+to_number(decode(to_char(trunc(v_date,'yyyy'),'d'), '1','8',

to_char(trunc(v_date,'yyyy'),'d'))) - 2)),'ww') as week

into v_ret1 from dual;

return to_char(v_date,'yyyy')||v_ret1;

end if;

if v_ret3 = 53 and to_char (v_date, 'mm') = '01' then--判斷是否是第乙個月 周次算成去年了最後一周 那麼拆分成兩個周

select to_char(decode(sign((v_date

+to_number(decode(to_char(trunc(v_date,'yyyy'),'d'),'1','8',

to_char(trunc(v_date,'yyyy'),'d'))) - 2)

-last_day(v_date)),1,last_day(v_date),

(v_date

+to_number(decode(to_char(trunc(v_date,'yyyy'),'d'), '1','8',

to_char(trunc(v_date,'yyyy'),'d'))) - 2)),'ww') as week

into v_ret1 from dual;

return to_char(v_date,'yyyy')||v_ret1;

end if;

if to_char(trunc(v_date,'yyyy'),'iw') = 53 and to_char (v_date, 'mm') = '01' then --判斷是否是第乙個月 周次算成去年了最後一周

v_ret := to_char (v_date, formate) + 1; --以後的周次向後推一

return v_ret;

end if;

v_ret := to_char (v_date, formate); --正常情況下按自然周處理

return v_ret;

end;

一周分享20180924

先水一水。文明之光 第四冊,主講 印刷術 啟蒙運動 明治維新與日本 美國反托拉斯和進步運動 抗生素 聯合國 好萊塢 基因。文明之光四冊到此就算看完了。上帝也瘋狂 1980年的一部 算是喜劇,挺好看的,乙個可樂瓶闖入了乙個原始社會,這裡的人不知道現代文明,可樂瓶的出現引發了一系列問題,於是主角決定把它...

工作第一周Oracle函式總結

1.oracle 行轉列和列轉行 最常見的行轉列,主要原理利用decode函式 聚合函式 sum max 結合group by分組實現的 max decode sw.sbbl,1 sw.sbbl,null as sbbl 01,max decode sw.sbbl,2 sw.sbbl,null as...

oracle使用to date查詢一周的第一天日期

周使用iw方式計算,如果一年當中第52周別之後至當年的12月31日之間,還有大於或等於4天的話,則定為當年的第53周,否則剩餘這些天數被歸為下一年的第1周 複製 如下 create or replace function f week to date a week varchar2 return c...