我最近开始学习mysql并陷入这个问题:
P(R)表示Julia在R行中绘制的图案。以下模式代表P(5): 编写查询以打印模式P(20)。
我写的答案是这样的:
DELIMITER $$
BEGIN
DECLARE CH VARCHAR(255);
DECLARE CT INT DEFAULT 20;
SET CH = ' *';
WHILE CT>0 DO
SELECT REPEAT(CH,CT);
SET CT=CT-1;
END WHILE
END $$
DELIMITER ;
不知怎的,它没有用......什么都不见了?
答案 0 :(得分:1)
set @number = 0;
select repeat('* ', @number := @number + 1) from information_schema.tables limit 20;
这对我有用!
答案 1 :(得分:0)
您的代码中有多个错误。试试这个:
DROP PROCEDURE IF EXISTS `DoPattern`;
DELIMITER $$
CREATE PROCEDURE DoPattern()
BEGIN
DECLARE CT INT(10) DEFAULT 20;
DECLARE CH VARCHAR(256) DEFAULT " *";
CREATE TEMPORARY TABLE `pattern` (`rowno` INT(2) UNSIGNED, `pattern_string` VARCHAR(50)) ENGINE=MEMORY;
WHILE CT > 0 DO
INSERT INTO `pattern` (`rowno`,`pattern_string`) VALUES (CT,REPEAT(CH,CT));
SET CT = CT - 1;
END WHILE;
SELECT `pattern_string` FROM `pattern` ORDER BY `rowno` DESC;
DROP TABLE `pattern`;
END$$
DELIMITER ;
CALL DoPattern();
答案 2 :(得分:0)
SELECT REPEAT('*',@ NUMBER:= @NUMBER - 1)FROM information_schema.tables,(SELECT @NUMBER:= 21)t LIMIT 20;
答案 3 :(得分:0)
这是在MS SQL中使用循环和“ REPLICATE”功能的简短解决方案:
DECLARE @R INT = 20;
WHILE @R > 0
BEGIN
DECLARE @C AS VARCHAR(max)
SET @C = (SELECT REPLICATE('*\n', @R))
PRINT replace(@C,'\n',char(10))
SET @R = @R- 1;
END
这是使用循环且没有“ REPLICATE”功能的长解决方案:
DECLARE @r INT = 20
DECLARE @i INT = 0
DECLARE @F varchar(max) = ''
WHILE @i < @r
BEGIN
DECLARE @j INT = 0
DECLARE @o varchar(max) = ''
WHILE @j < @r - @i
BEGIN
SET @o = @o + '* '
SET @j += 1
END
SET @i += 1
SET @F = @F + @o + CHAR(10)
END
PRINT @F
注意 :如果看不到以三角形图案打印的 * ,则必须使用您在“ char(?)”
中指定的内容答案 4 :(得分:0)
DECLARE @i INT = 20
WHILE (@i > 0)
BEGIN
PRINT REPLICATE('* ', @i)
SET @i = @i - 1
END
答案 5 :(得分:0)
使用它来解决查询:
SET @X=21;
SELECT REPEAT('* ',@X:=@X-1) FROM information_schema.tables LIMIT 20;
答案 6 :(得分:0)
对于 MySQL,See question 这对我有用 -
set @number = 21;
select repeat('* ', @number := @number - 1) from information_schema.tables;