Как я могу напечатать треугольник звезд, используя SQL - PullRequest
4 голосов
/ 29 марта 2012

Возможно ли практически создать треугольник звезд, как это показано ниже в SQL. Я знаю, что это можно легко сделать на любом другом языке программирования, таком как C, C ++, Java, но хочу знать, возможно ли это с помощью простогоSQL или PL / SQL. Я пытался поработать над этим с двойной таблицей в Oracle, но не смог пройти через него.

  *              *
 * *             * * 
* * *    or      * * *

Может кто-нибудь, пожалуйста, пролить немного света, если кто-то знает об этом.

Ответы [ 10 ]

8 голосов
/ 29 марта 2012

Самый простой подход был бы примерно таким.Вы можете стать более сложным, особенно если вы хотите построить равносторонний треугольник, а не прямоугольный.

SQL> ed
Wrote file afiedt.buf

  1  select rpad( '* ', level*2, '* ' )
  2    from dual
  3* connect by level <= 3
SQL> /

RPAD('*',LEVEL*2,'*')
--------------------------------------------------------------------------------
*
* *
* * *
2 голосов
/ 29 марта 2012

Не уверен, что именно вы ищете.Возможно это?

select '*' from dual
union all select '**' from dual
union all select '***' from dual

Пример

1 голос
/ 05 ноября 2012

Попробуйте это ..

 declare @x int,@y int,@diff int
 select @x=0,@y=10,@diff=2--diferrence between consecutive rows
 while @x<@y
 begin
    if @x=0 and @diff<>1
       print space((@y-@x)*@diff-1)+replicate('*',1)
    else if(@diff%2=0)
       print space((@y-@x)*@diff)+replicate('* ',@x+(@x*(@diff-1)))
    else
       print space((@y-@x)*@diff)+replicate('* ',@x+(@x*(@diff-1)))
    select @x=@x+1
 end
0 голосов
/ 24 ноября 2018

[Равносторонний след] Мы можем создать пирамиду с Oracle SQL следующим образом.

select rpad(' ',5 -level) || rpad( '* ', level*2, '* ' )
   from dual
 connect by level <= 5;

** Здесь 5 - количество строк.

Давайте изменим это,

select rpad(' ',level) || rpad( '* ', 2*(5-level+1), '* ' )
  from dual
 connect by level <= 5; 
0 голосов
/ 13 июля 2017
select rpad('* ', level * 2, '* ')
  from dual connect by
    level <= 10
* 
* * 
* * * 
* * * * 
* * * * * 
* * * * * * 
* * * * * * * 
* * * * * * * * 
* * * * * * * * * 
* * * * * * * * * * 


select rpad(' ',r*2,' ')||rpad('* ',l*2,'* ') k 
  from ( select level l,row_number() over(order by null) r 
            from dual 
           connect by level<=10 
         order by l desc)

  * * * * * * * * * * 
    * * * * * * * * * 
      * * * * * * * * 
        * * * * * * * 
          * * * * * * 
            * * * * * 
              * * * * 
                * * * 
                  * * 
                    *



select rpad(' ',l*2,' ')||rpad('* ',r*2,'* ') k 
 from ( select level l,row_number() over(order by null) r 
          from dual 
         connect by level<=10 
         order by l desc)

                    * 
                  * * 
                * * * 
              * * * * 
            * * * * * 
          * * * * * * 
        * * * * * * * 
      * * * * * * * * 
    * * * * * * * * * 
  * * * * * * * * * * 

select rpad(' ',l,' ')||rpad('* ',r*2,'* ') k 
from ( select level l,row_number() over(order by null) r 
        from dual 
       connect by level<=10 
       order by l desc) 

      * 
     * * 
    * * * 
   * * * * 
  * * * * * 
 * * * * * * 
* * * * * * *        
0 голосов
/ 18 июля 2016
DECLARE @lclMaxLevel INT=5
DECLARE @lclPrintCount INT =0

WHILE @lclMaxLevel > 0
  BEGIN
      PRINT Space(@lclMaxLevel)
            + Replicate('*', @lclPrintCount+1)

      SET @lclMaxLevel=@lclMaxLevel - 1
      SET @lclPrintCount=@lclPrintCount + 1
  END
0 голосов
/ 29 мая 2016
declare @row int = 5,
@index int = 0,
@string nvarchar(5) =''
while @row > 0
begin
    set @index = @row
    while @index > 0
    begin
        set @string = '*' + @string
        set @index = @index - 1
    end
    print @string
    set @string = ''
    set @row = @row - 1
end
 *****
 ****
 ***
 **
 *
0 голосов
/ 05 ноября 2012
declare @count int,@num int,@num1 int, @space int, @str varchar(50)
set @count = 5 set @num = 1
while(@num<=@count)
begin
  set @num1 = 0 set @space = @count-@num
  while (@num1<@num)
  begin
   if @str is null
    set @str = '* '
   else
    set @str = @str+'* '   set @num1 = @num1+1
  end
print (space(@space)+@str)
set @num = @num+1   set @str = null
end
0 голосов
/ 26 октября 2012

Вот скрипт для получения идеального треугольника или пирамиды в sql (протестировано в Microsoft Sql 2008)

declare @x int,@y int
select @x=5,@y=0
while @x>0
begin
print space(@x)+replicate('*',@y)+replicate('*',@y+1)
set @y=@y+1
set @x=@x-1
end

     *
    ***
   *****
  *******
 *********

Вы можете получить много других сценариев и справку по этой ссылке ... это было полезно для меня

Ссылка: - sqlquerynscript

0 голосов
/ 29 марта 2012

Если все, что вам нужно, это простой треугольник, то вы можете сделать это:

SELECT '*' FROM table
UNION
SELECT '**' FROM table
UNION
SELECT '***' FROM table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...