自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

數(shù)據(jù)庫 Oracle
Oracle使用SQL語句能否實(shí)現(xiàn)日歷的功能呢?答案是肯定的,下文對該功能的實(shí)現(xiàn)方法作了詳細(xì)的介紹,供您參考學(xué)習(xí)之用。

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

1 要構(gòu)造某年某月的日歷,必須先知道這個月的開始時間,結(jié)束時間及天數(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 接下來就是需要得到開始時間到結(jié)束時間每一天的結(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 這個結(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)計匯總了,大家發(fā)現(xiàn)一個小問題沒有?
  就是該月的第幾周這里是按本月開始是星期幾為開始的日期,很有意思,
  這樣我們按該日是該年的第幾周則是以今年開始日期是星期幾為開始日期

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

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

 

 

 

【編輯推薦】

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

Oracle分頁查詢語句的寫法

Oracle sqlplus語句編輯命令

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

Oracle修改用戶語法介紹

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-03-31 15:03:54

Oracle執(zhí)行

2010-09-25 15:20:43

SQL遞歸語句

2010-11-15 14:16:09

Oracle表記錄

2010-04-29 12:05:21

Oracle使用SQL

2010-11-12 13:34:02

動態(tài)sql語句

2010-09-27 10:04:30

Sql Update語

2010-09-06 09:36:51

SQL語句

2010-04-13 15:04:16

Oracle優(yōu)化

2010-10-27 11:25:13

ORACLE ROWN

2009-11-16 17:55:58

Oracle SQL語

2010-04-06 14:26:41

Oracle復(fù)制表

2011-08-17 09:48:30

Python模擬OraPLUS工具

2009-11-16 13:47:35

Oracle SQL語

2010-04-20 15:22:34

Oracle SQL

2010-04-29 14:06:40

Oracle SQL

2009-01-14 09:28:12

OracleSQL10g

2010-04-12 14:22:13

Oracle性能sql語句

2010-09-06 09:53:41

SQL Server語句

2009-11-06 17:21:36

驗證Oracle SQ

2010-04-13 14:36:17

Oracle性能檢測
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號