lhrbest

Oracle用SQL打印日历




1.1  打印当月日历

SELECT MAX(DECODE(DOW, 1, D, NULL)) SUN,

       MAX(DECODE(DOW, 2, D, NULL)) MON,

       MAX(DECODE(DOW, 3, D, NULL)) TUE,

       MAX(DECODE(DOW, 4, D, NULL)) WED,

       MAX(DECODE(DOW, 5, D, NULL)) THU,

       MAX(DECODE(DOW, 6, D, NULL)) FRI,

       MAX(DECODE(DOW, 7, D, NULL)) SAT

  FROM (SELECT ROWNUM D,

               ROWNUM - 2 + TO_NUMBER(TO_CHAR(TRUNC(SYSDATE, \'MM\'), \'D\')) P,

               TO_CHAR(TRUNC(SYSDATE, \'MM\') - 1 + ROWNUM, \'D\') DOW

          FROM ALL_OBJECTS

         WHERE ROWNUM <=

               TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE(SYSDATE)), \'DD\')))

 GROUP BY TRUNC(P / 7)

 ORDER BY sun NULLS FIRST;

wps2289.tmp 

 

 

1.2  打印年历

SELECT CASE

         WHEN (NEW_YWEEK = MIN(NEW_YWEEK)

               OVER(PARTITION BY MON ORDER BY NEW_YWEEK)) THEN

          MON_NAME

         ELSE

          NULL

       END AS MONTH,

       NEW_YWEEK AS YWEEK,

       ROW_NUMBER() OVER(PARTITION BY MON ORDER BY NEW_YWEEK) AS MWEEK,

       SUM(DECODE(WDAY, \'1\', MDAY, NULL)) AS SUN,

       SUM(DECODE(WDAY, \'2\', MDAY, NULL)) AS MON,

       SUM(DECODE(WDAY, \'3\', MDAY, NULL)) AS TUE,

       SUM(DECODE(WDAY, \'4\', MDAY, NULL)) AS WED,

       SUM(DECODE(WDAY, \'5\', MDAY, NULL)) AS THU,

       SUM(DECODE(WDAY, \'6\', MDAY, NULL)) AS FRI,

       SUM(DECODE(WDAY, \'7\', MDAY, NULL)) AS SAT

  FROM (SELECT DAYOFYEAR AS EVERYDAY,

               TO_CHAR(DAYOFYEAR, \'mm\') AS MON,

               TO_CHAR(DAYOFYEAR, \'Month\') AS MON_NAME,

               TO_CHAR(DAYOFYEAR, \'w\') AS MWEEK,

               TO_CHAR(DAYOFYEAR, \'ww\') AS YWEEK,

               CASE

                 WHEN (TO_CHAR(TO_DATE(&YEAR || \'0101\', \'yyyymmdd\'), \'d\') > \'1\') AND

                      (TO_CHAR(DAYOFYEAR, \'d\') <

                      TO_CHAR(TO_DATE(&YEAR || \'0101\', \'yyyymmdd\'), \'d\')) THEN

                  TO_CHAR(TO_CHAR(DAYOFYEAR, \'ww\') + 1, \'fm00\')

                 ELSE

                  TO_CHAR(DAYOFYEAR, \'ww\')

               END AS NEW_YWEEK,

               TO_CHAR(DAYOFYEAR, \'d\') AS WDAY,

               TO_CHAR(DAYOFYEAR, \'dd\') AS MDAY

          FROM (SELECT TO_DATE(&YEAR || \'0101\', \'yyyymmdd\') + LEVEL - 1 AS DAYOFYEAR

                  FROM DUAL

                CONNECT BY LEVEL <=

                           TO_CHAR(TO_DATE(&YEAR || \'1231\', \'yyyymmdd\'),

                                   \'ddd\')))

 GROUP BY MON, MON_NAME, NEW_YWEEK;

wps228A.tmp 

wps229B.tmp 

1.3  打印某月日历

1.3.1  方法1

ALTER session set nls_language=\'SIMPLIFIED CHINESE\';

select  to_char(everyday,\'ww\') as week,

        sum(decode(to_char(everyday,\'dy\'),\'星期日 

        

        

        

        

        

         

        

         

            <   

       

  

  

wps229C.tmp 

 

 

  

        

        

        

        

        

        

         

        

         

            <   

       

  

  

wps229D.tmp 






  1.  
  2.                     
  3.              
  4.            
  5.              
  6.            
  7.            
  8.                  
  9.               
  10.               
  11.               
  12.               
  13.               
  14.               
  15.               
  16.         
  17.                     
  18.                     
  19.                     
  20.                     
  21.                  
  22.                     &     >  
  23.                           <
  24.                         &     
  25.                         
  26.                    
  27.                      
  28.                    
  29.                     
  30.                     
  31.               &         
  32.                      
  33.                      < &   
  34.                  
  35.          
  36.        
  37.   







  1.               
  2.         <

      

















        

                  
                     
                     
                     
             






  1.  
  2.                     
  3.              
  4.            
  5.              
  6.            
  7.           
  8.                  
  9.               
  10.               
  11.               
  12.               
  13.               
  14.               
  15.               
  16.         
  17.                     
  18.                     
  19.                     
  20.                         
  21.                     
  22.                     
  23.               &         
  24.                      
  25.                      < &   
  26.                  
  27.          
  28.        
  29.   









  1. >    





  1.  
  2.                     
  3.              
  4.            
  5.              
  6.            
  7.            
  8.                  
  9.               
  10.               
  11.               
  12.               
  13.               
  14.               
  15.               
  16.         
  17.                     
  18.                     
  19.                     
  20.                    
  21.                     
  22.                     
  23.              
  24.                      
  25.                     &         
  26.                      
  27.                      
  28.                      &     
  29.                        < &   
  30.                  
  31.          
  32.        
  33.   

   

  1.   &     >  
  2.             
  3.               < &     
  4.      
  5.                 
  6.      
  7.              
  8.   






 



 

 
 



 




 < 
 


  
  
  
  
  
  
 < 
 



  
  
  
  
  
  
  
  
  
  
  
  
   
 < 
 


 
 

 
       
       
       
       
       
       
       
    
         
         <
       
 

 
       
       
       
       
       
       
       
    
         
         <
       
 

 

 
       
       
       
       
       
       
       
    
         
         <
       
 

  







    


DBA笔试面试讲解
欢迎与我联系


分类:

技术点:

相关文章: