вывести символ в sqlserver в одной строке цикла while - PullRequest
0 голосов
/ 21 марта 2019

Мне нужно выдать

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

как вывод на сервере sql

DECLARE @x INT ;
DECLARE @y INT ;

SET @x = 1;
set @y=0;

while @x <=5
begin
while @y<@x
    begin
    print('*')
    set @y=@y+1
    end
print ''+char(1)
set @y=0;
set @x=@x+1
end

Но я не могу печатать * в одной строке, каждая * печатает в отдельной строке

Ответы [ 4 ]

2 голосов
/ 21 марта 2019

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

select replicate('*', n)
from
(
    values(1),(2),(3),(4),(5)
) x(n)
2 голосов
/ 21 марта 2019

Это похоже на глупый внутренний цикл, когда вы можете просто сделать:

print replicate('*', 5)

и поместите это в цикл (если вы хотите print вместо select).

set @x = 1;

while @x <=5
begin
    print replicate('*', @x);
    set @x = @x + 1;
end;
0 голосов
/ 21 марта 2019

Вы можете попробовать вот так

;WITH nums AS
       (SELECT 1 AS value
        UNION ALL
        SELECT value + 1 AS value
        FROM nums
        WHERE nums.value <=5)
    SELECT replicate('*',value)
    FROM nums 
0 голосов
/ 21 марта 2019

Вы можете создать переменную и заполнить ее тем, что вы хотите напечатать, а затем распечатать это после всех ваших циклов.

См. Код ниже, я закомментировал ваши отпечатки и использовал переменные.

DECLARE @x INT ;
DECLARE @y INT ;
DECLARE @ValueToPrint VARCHAR(MAX) = ''

SET @x = 1;
set @y=0;

while @x <=5
    begin
        WHILE @y<@x
            BEGIN
                SET @ValueToPrint += '*'
                --print('*')
                SET @y=@y+1
            END


        SET @ValueToPrint += ''+char(1)
        --PRINT ''+char(1)
        -- maybe you want to print it here, if so print the variable here if so uncomment these 2 lines
        -- PRINT @ValueToPrint
        -- SET @ValueToPrint = ''

        SET @y=0;
        SET @x=@x+1
    END

PRINT @ValueToPrint
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...