2016-05-30 49 views
1

我想畫兩個圖案和我堅持用不同的問題:繪製圖案使用Oracle SQL

1)

******************* 
****************** 
***************** 
**************** 
*************** 
************** 
************* 
************ 
*********** 
********** 
********* 
******** 
******* 
****** 
***** 
**** 
*** 
** 
* 
NULL 

我已經寫了下面的查詢來獲取這樣的:

select CASE WHEN (r2-r1)!=0 THEN 
     rpad('*',r2-r1,'*') END 
from (select rownum r1 
      ,(max(level) over()) as r2 
    from dual 
    connect by level<=20); 

我面臨的問題(如果你看圖)是空的即將結束。我無法想出辦法擺脫這一點。

2)我想繪製與每個星星之間的空間相同的模式。卡在這裏太..

所有的幫助將是非常可觀的。

+0

您所面臨的兩個問題,你只抓到在末尾空,但如果你需要的最長的字符串是20個星號,這是不 - 它只有19。 – mathguy

回答

0
SQL> select rpad('*', level, '*') as c from dual connect by level <= 20 order by 
    length(c) desc; 

C 
------------------------------------ 
******************** 
******************* 
****************** 
***************** 
**************** 
*************** 
************** 
************* 
************ 
*********** 
********** 
********* 
******** 
******* 
****** 
***** 
**** 
*** 
** 
* 

20 rows selected. 

SQL> select rpad('*', 2*level-1, ' *') as c from dual connect by level <= 20 order by 
    length(c) desc; 

C 
-------------------------------------------------- 
* * * * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * 
* * * * * * * * * * * * * 
* * * * * * * * * * * * 
* * * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * 
* * * * * * * * 
* * * * * * * 
* * * * * * 
* * * * * 
* * * * 
* * * 
* * 
* 

20 rows selected. 
0

就過濾掉的行,其中最大等於ROWNUM:

SELECT 
    rpad('*', r2 - r1, '*') c1, 
    rpad('* ', (r2 - r1) * 2, '* ') c2 
FROM 
    (SELECT ROWNUM r1, max(LEVEL) OVER() AS r2 FROM dual CONNECT BY LEVEL <= 20) 
WHERE 
    r1 < r2