如何使用SQL打印星形三角形 在SQL中,像这样创建一个这样的星形三角形是可行的。我知道这可以在任何其他编程语言中轻松地完成,比如C、C++、java,但是想知道它是否真的可以用SQL或PL/SQL来完成。我尝试用Oracle中的双表来处理它,但是不能通过它。 * * * * * * * * * or * * *

如何使用SQL打印星形三角形 在SQL中,像这样创建一个这样的星形三角形是可行的。我知道这可以在任何其他编程语言中轻松地完成,比如C、C++、java,但是想知道它是否真的可以用SQL或PL/SQL来完成。我尝试用Oracle中的双表来处理它,但是不能通过它。 * * * * * * * * * or * * *,sql,database,oracle,Sql,Database,Oracle,如果有人知道这件事,请有人告诉我。不知道你到底在找什么。也许是这个 select '*' from dual union all select '**' from dual union all select '***' from dual 如果您只需要简单的三角形,则可以执行以下操作: SELECT '*' FROM table UNION SELECT '**' FROM table UNION SELECT '***' FROM table 最简单的方法是这样的。你可以变得更复杂,特别是

如果有人知道这件事,请有人告诉我。

不知道你到底在找什么。也许是这个

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

如果您只需要简单的三角形,则可以执行以下操作:

SELECT '*' FROM table
UNION
SELECT '**' FROM table
UNION
SELECT '***' FROM table

最简单的方法是这样的。你可以变得更复杂,特别是如果你想建立等边三角形而不是直角三角形

SQL> ed
Wrote file afiedt.buf

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

RPAD('*',LEVEL*2,'*')
--------------------------------------------------------------------------------
*
* *
* * *

下面是在Microsoft sql 2008中测试的sql中获得完美三角形或金字塔的脚本

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
你可以在这个链接上获得更多的脚本和帮助。。。这对我很有帮助

链接:-

试试这个


[Equilateral Traingle]我们可以用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; 

是的,这应该是可能的。这只是为了好玩还是真的?SQL本身不能打印任何东西,是吗?三角形的高度是如何指定的?它应该如何返回,作为一个行集合或单个字段等?闻起来像是作业!对不起,如果不是;我希望它是通用的。。如果我想打印长度为'n'的文件,我该怎么做?我应该使用'n'选择数并将所有选择数合并吗?这是我要找的一个。。。非常感谢。但是等边三角形呢…?该查询不需要逐级排序来保证生成三角形吗?这不是Oracle支持的语法。您可能需要改进源代码的格式。几乎无法阅读!这似乎是可行的,但需要付出很大的努力来纠正小的语法错误。我花了一段时间才弄清楚它到底出了什么问题,如果明星定位不重要的话,我就投了反对票。如果我必须大量打印,例如20张,我就不适合。
 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
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
 *****
 ****
 ***
 **
 *
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
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) 

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