【问题标题】:How do I make a triangle of stars using stored procedures in SQL? [duplicate]如何使用 SQL 中的存储过程制作星形三角形? [复制]
【发布时间】:2020-07-17 14:22:19
【问题描述】:

我想进一步锻炼自己对SQL存储过程的使用,所以我想到了以下有趣的问题。

如何创建一个带有输入的存储过程来制作一个星形三角形?例如 input = 5 将打印:

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

我知道这可以在没有存储过程的情况下轻松完成,但我的问题是如何创建一个存储过程来做到这一点?提前致谢!!

【问题讨论】:

  • 感谢 Suraj,这是在不使用存储过程的情况下完成的(我知道这在不使用 SP 的情况下应该相当容易),但我想知道如何通过使用带有输入的存储过程来实现这一点。
  • 在 SSMS 中绘制三角形的一种方法是使用 geometry 类型:SELECT geometry::STGeomFromText('POLYGON((0 2, 2 2, 2 0, 0 2))', 0) AS triangle;。空间结果将以图形方式显示结果。

标签: sql sql-server while-loop


【解决方案1】:

您可以简单地使用以下存储过程。

create procedure DrawTriangle
@StrLen INT 
as
Begin
 WHILE @StrLen >= 1
 BEGIN
     PRINT REPLICATE('*',@StrLen)
     SET @StrLen = @StrLen - 1
 END
END

直播db<>fiddle演示。

更多请关注SO Answer

要打印右对齐的三角形,您可以使用以下代码。

create procedure DrawRightAlignedTriangle
@StrLen INT 
as
Begin
declare @i int = 0
declare @space int

 WHILE @StrLen >= 1
 BEGIN
     SET @space = @StrLen - @i 

     PRINT space(@i) + REPLICATE('*', @StrLen)
     SET @StrLen = @StrLen - 1
     SET @i = @i + 1
 END
END

以下是db<>fiddle 的现场演示。

【讨论】:

  • 非常感谢!我怎样才能使它正确对齐?
  • @Kay 请检查更新的答案以打印右对齐三角形。我希望它会对您有所帮助,如果可以,请您接受并投票赞成答案。
【解决方案2】:

您可以使用递归 CTE 以 select 的形式执行此操作:

with stars as (
      select replicate('*', 5) as stars
      union all
      select stuff(stars, 1, 1, '')
      from stars s
      where s.stars > ''
     )
select *
from stars s
order by s.stars desc;

Here 是一个 dbfiddle。

如果您愿意,您可以在输出时右对齐开始:

with stars as (
      select replicate('*', 5) as stars
      union all
      select stuff(stars, 1, 1, '')
      from stars s
      where s.stars > ''
     )
select right(replicate(' ', 5) + s.stars, 5)
from stars s
order by s.stars desc;

【讨论】:

  • 谢谢,但我怎样才能使它右对齐?谢谢。
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
相关资源
最近更新 更多