成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle使用SQL語句生成日歷的實現方法

數據庫 Oracle
Oracle使用SQL語句能否實現日歷的功能呢?答案是肯定的,下文對該功能的實現方法作了詳細的介紹,供您參考學習之用。

Oracle使用SQL語句可以實現日歷的功能,下面就為您詳細介紹Oracle使用SQL語句生成日歷的實現方法,希望對您能有所幫助。

1 要構造某年某月的日歷,必須先知道這個月的開始時間,結束時間及天數
開始日期 例如 2006年11月

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

結束日期

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

日期區間天數

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

2 接下來就是需要得到開始時間到結束時間每一天的結果集

  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 再進一步則是將該月中的日期分解成第幾周,星期幾。

  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 這個結果集求出來后,接下拉就是使用DECODE函數進行行列轉換了

  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 再進一步就是統計匯總了,大家發現一個小問題沒有?
  就是該月的第幾周這里是按本月開始是星期幾為開始的日期,很有意思,
  這樣我們按該日是該年的第幾周則是以今年開始日期是星期幾為開始日期

  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 以上日歷基本成功,但還有一個問題,就是一周的開始時間問題

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

以上是最終的結果。

 

 

 

【編輯推薦】

教您如何實現Oracle模糊查詢

Oracle分頁查詢語句的寫法

Oracle sqlplus語句編輯命令

Oracle循環語句的寫法

Oracle修改用戶語法介紹

責任編輯:段燃 來源: 互聯網
相關推薦

2010-03-31 15:03:54

Oracle執行

2010-09-25 15:20:43

SQL遞歸語句

2010-11-12 13:34:02

動態sql語句

2010-11-15 14:16:09

Oracle表記錄

2010-04-29 12:05:21

Oracle使用SQL

2010-09-27 10:04:30

Sql Update語

2010-09-06 09:36:51

SQL語句

2010-04-13 15:04:16

Oracle優化

2010-10-27 11:25:13

ORACLE ROWN

2011-08-17 09:48:30

Python模擬OraPLUS工具

2009-11-16 13:47:35

Oracle SQL語

2009-11-16 17:55:58

Oracle SQL語

2009-01-14 09:28:12

OracleSQL10g

2010-04-20 15:22:34

Oracle SQL

2010-04-29 14:06:40

Oracle SQL

2010-04-12 14:22:13

Oracle性能sql語句

2010-04-06 14:26:41

Oracle復制表

2010-09-06 09:53:41

SQL Server語句

2010-11-11 11:37:22

SQL SELECT語

2010-10-28 10:10:48

oracle存圖片
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一级免费电影 | 国产农村妇女毛片精品久久麻豆 | 久久久成人动漫 | 日本久久网 | 日本不卡一区 | 中文字幕在线免费视频 | 日本不卡一区二区三区在线观看 | 色狠狠桃花综合 | 日韩午夜电影在线观看 | 国产视频1 | 老头搡老女人毛片视频在线看 | 成人精品区 | 久久成人18免费网站 | 亚洲精品乱码 | 国产欧美视频一区二区 | 91不卡| 国产精品99久久久久久久久 | 国产精品视频一区二区三区 | 国产在线视频一区二区 | 精品国产免费人成在线观看 | 亚洲精品一区二区在线观看 | 色狠狠一区 | 欧美一区二区免费在线 | 久久婷婷香蕉热狠狠综合 | caoporn国产| 81精品国产乱码久久久久久 | 337p日本欧洲亚洲大胆精蜜臀 | 伊人网综合 | 成人精品在线观看 | 国产高清一区 | 国产午夜亚洲精品不卡 | 国产黄色大片 | 日韩国产在线观看 | 久久精品久久久久久 | 欧美日韩在线不卡 | 99久久精品免费 | 色男人的天堂 | 黄a网站| 激情91 | 成人二区 | 久久国产精品视频观看 |