Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
打印五环和五角星的SQL代码
 
 
    大牛写的这两段SQL实在是太销魂了,实在是忍不住要转载过来,留着以后慢慢看,太牛了……
    http://www.itpub.net/viewthread.php?tid=981654&extra=&page=1
 
 
 
with a as (select distinct round(a.x + b.x) x,round(a.y + b.y) y from
(select (sum(x) over(order by n)) x,
                            round(sum(y) over(order by n)) y
              from (select n, cos(n/30 * 3.1415926)*2  x,
                           sin(n/30 * 3.1415926) y
                           from (select rownum - 1 n from all_objects where rownum <= 30 +30))) a,
            (select n, (sum(x) over(order by n)) x,
                            round(sum(y) over(order by n)) y
              from (select n,
                           cos( m /3 * 3.1415926) * 2 * 15 x,
                           sin( m /3 * 3.1415926)* 15 y
                      from (select case when rownum <= 2 then 3
                      when rownum = 3 then -2 else -6 end m, rownum - 1 n
                              from all_objects where rownum <= 5))) b
          )
select replace(sys_connect_by_path(point, '/'), '/', null) star
  from (select b.y, b.x, decode(a.x, null, ' ', '*') point
          from a,
               (select *
                  from (select rownum - 1 + (select min(x) from a) x
                          from all_objects
                         where rownum <= (select max(x) - min(x) + 1 from a)),
                       (select rownum - 1 + (select min(y) from a) y
                          from all_objects
                         where rownum <= (select max(y) - min(y) + 1 from a))) b
         where a.x(+) = b.x
           and a.y(+) = b.y)
where x = (select max(x) from a)
start with x = (select min(x) from a)
connect by y = prior y
       and x = prior x + 1;
 
 

              * * * * * *                   * * * * * *                   * * * * * *             
          * *             * *           * *             * *           * *             * *         
       * *                   * *     * *                   * *     * *                   * *      
     *                           * *                           * *                           *    
   **                            ***                           ***                            **  
  *                             *   *                         *   *                             * 
*                             *     *                       *     *                             *
*                             *     *                       *     *                             *
*                             *       *                     *       *                             *
*                             *       *                     *       *                             *
*                             *       *                     *       *                             *
*                             *       *                     *       *                             *
*                             *     *                       *     *                             *
*                           * * * * * *                   * * * * * *                           *
  *                      * *    *   *    * *           * *    *   *    * *                      * 
   *                  * *        * *        * *     * *        * *        * *                  *  
    **              *            ***            * *            ***            *              **   
       *          **           *     *          ***          *     *           **          *      
         ** *    *        * **         ** *    *   *    * **         ** *        *    * **        
              * * * * * *                   * * * * * *                   * * * * * *             
                *                             *     *                             *               
               *                             *       *                             *              
               *                             *       *                             *              
               *                             *       *                             *              
               *                             *       *                             *              
                *                             *     *                             *               
                *                             *     *                             *               
                 *                             *   *                             *                
                  *                             * *                             *                 
                   **                           ***                           **                  
                      *                       *     *                       *                     
                        ** *             * **         ** *             * **                       
                             * * * * * *                   * * * * * *                            
 
 
with a as (
            select distinct round(sum(x) over(order by n)) x,
                            round(sum(y) over(order by n)) y
              from (select n,
                           cos(trunc(n / 20) * (1-1/5) * 3.1415926) * 2 x,
                           sin(trunc(n / 20) * (1-1/5) * 3.1415926) y
                      from (select rownum - 1 n from all_objects where rownum <= 20 * 5))
          )
select replace(sys_connect_by_path(point, '/'), '/', null) star
  from (select b.y, b.x, decode(a.x, null, ' ', '*') point
          from a,
               (select *
                  from (select rownum - 1 + (select min(x) from a) x
                          from all_objects
                         where rownum <= (select max(x) - min(x) + 1 from a)),
                       (select rownum - 1 + (select min(y) from a) y
                          from all_objects
                         where rownum <= (select max(y) - min(y) + 1 from a))) b
         where a.x(+) = b.x
           and a.y(+) = b.y)
where x = (select max(x) from a)
start with x = (select min(x) from a)
connect by y = prior y
       and x = prior x + 1;



                    *                   
                   * *                  
                   * *                  
                  *   *                 
                 **   **                
                *       *               
                *       *               
* * * * * * * *** * * * *** * * * * * * *
  **          *           *          ** 
     **       *           *       **    
        *    *             *    *       
          ** *             * **         
            ** *         * **           
           *    * *   * *    *          
           *       * *       *          
          *      * * * *      *         
         *    * *       * *    *        
         *  *               *  *        
        ** *                 * **       
        *                       *       
 
 
 
 
posted on 2008-11-01 19:47 decode360 阅读(406) 评论(0)  编辑  收藏 所属分类: 05.SQL

只有注册用户登录后才能发表评论。


网站导航: