av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Oracle使用SQL語句生成日歷的實(shí)現(xiàn)方法

Oracle使用SQL語句可以實(shí)現(xiàn)日歷的功能,下面就為您詳細(xì)介紹Oracle使用SQL語句生成日歷的實(shí)現(xiàn)方法,希望對(duì)您能有所幫助。

1 要構(gòu)造某年某月的日歷,必須先知道這個(gè)月的開始時(shí)間,結(jié)束時(shí)間及天數(shù)
開始日期 例如 2006年11月

 
 
 
  1. select to_date('20061101','yyyymmdd') as startDayOfMon from  dual; 

結(jié)束日期

 
 
 
  1. select last_day(to_date('20061101','yyyymmdd')) as endDayOfMon from  dual; 

日期區(qū)間天數(shù)

 
 
 
  1. select last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1 as DayOfMon  
  2.   from dual; 

2 接下來就是需要得到開始時(shí)間到結(jié)束時(shí)間每一天的結(jié)果集

 
 
 
  1. select * from (  
  2. select to_date('20061101','yyyymmdd') + level - 1 as everyDay from dual  
  3.   connect by level <=   
  4.   (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)); 

3 再進(jìn)一步則是將該月中的日期分解成第幾周,星期幾。

 
 
 
  1. select everyDay,to_char(everyday,'yyyy') as 年,  
  2.    to_char(everyday,'mm') as 月,  
  3.    to_char(everyday,'dd') as 日,  
  4.    to_char(everyday,'dy') as 星期幾,  
  5.    lpad(to_char(everyday,'w'),6) as 該月的第幾周,  
  6.    lpad(to_char(everyday,'ww'),6) as 該年的第幾周  
  7.    from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay from dual  
  8.   connect by level <=   
  9.   (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)); 

4 這個(gè)結(jié)果集求出來后,接下拉就是使用DECODE函數(shù)進(jìn)行行列轉(zhuǎn)換了

 
 
 
  1. select everyDay,to_char(everyday,'yyyy') as 年,  
  2.    to_char(everyday,'mm') as 月,  
  3.    to_char(everyday,'dd') as 日,  
  4.    to_char(everyday,'dy') as 星期幾,  
  5.    lpad(to_char(everyday,'w'),6) as 該月的第幾周,  
  6.    lpad(to_char(everyday,'ww'),6) as 該年的第幾周,  
  7.    lpad(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd')),3) as 星期日,  
  8.    lpad(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd')),3) as 星期一,  
  9.    lpad(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd')),3) as 星期二,  
  10.    lpad(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd')),3) as 星期三,  
  11.    lpad(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd')),3) as 星期四,  
  12.    lpad(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd')),3) as 星期五,  
  13.    lpad(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd')),3) as 星期六  
  14.     from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay from dual  
  15.   connect by level <=  
 
 
 
  1. (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)); 

5 再進(jìn)一步就是統(tǒng)計(jì)匯總了,大家發(fā)現(xiàn)一個(gè)小問題沒有?
  就是該月的第幾周這里是按本月開始是星期幾為開始的日期,很有意思,
  這樣我們按該日是該年的第幾周則是以今年開始日期是星期幾為開始日期

 
 
 
  1. select  to_char(everyday,'w') as week,  
  2.         sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日,  
  3.         sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一,  
  4.         sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二,  
  5.         sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三,  
  6.         sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四,  
  7.         sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五,  
  8.         sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六  
  9.     from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay   
  10.           from dual  
  11.           connect by level <= (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)  
  12.         )  
  13.   group by to_char(everyday,'w'); 

6 以上日歷基本成功,但還有一個(gè)問題,就是一周的開始時(shí)間問題

 
 
 
  1. select  to_char(everyday,'ww') as week,  
  2.         sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日,  
  3.         sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一,  
  4.         sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二,  
  5.         sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三,  
  6.         sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四,  
  7.         sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五,  
  8.         sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六  
  9.     from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay   
  10.           from dual  
  11.           connect by level <= (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)  
  12.         )  
  13.   group by to_char(everyday,'ww'); 

7  這樣雖然可以解決,但還存在問題,大家可以考慮下!也可以考慮下年歷怎么做!

 
 
 
  1. select  ceil((to_char(everyday,'dd')+(to_char(to_date('20061101','yyyymmdd'),'d')-1))/7) as week,  
  2.         sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日,  
  3.         sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一,  
  4.         sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二,  
  5.         sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三,  
  6.         sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四,  
  7.         sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五,  
  8.         sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六  
  9.     from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay   
  10.           from dual  
  11.           connect by level <= (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)  
  12.         )  
  13.   group by ceil((to_char(everyday,'dd')+(to_char(to_date('20061101','yyyymmdd'),'d')-1))/7); 

以上是最終的結(jié)果。

【編輯推薦】

教您如何實(shí)現(xiàn)Oracle模糊查詢

Oracle分頁查詢語句的寫法

Oracle sqlplus語句編輯命令

Oracle循環(huán)語句的寫法

Oracle修改用戶語法介紹


文章標(biāo)題:Oracle使用SQL語句生成日歷的實(shí)現(xiàn)方法
分享鏈接:http://uogjgqi.cn/article/dpohego.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流