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...