Comecei alguns desafios com a equipe de banco da empresa pedindo algumas soluções para um problema…
Semana passada eles tinham que entregar um código que mostra-se uma tabuada… mas haviam algumas premissas:
- Eu poderia escolher de qual a qual número. Ex.: tabuada do 2 ao 10 ou do 5 ao 20…
- em todos os casos o resultado deveria ser um texto que possuísse o símbolo de multiplicação X e o sinal de igual =…
O pessoal se empenhou e vieram com códigos interessantes…
um deles foi:
DECLARE @InicNum int, @FimcNum int
SET @InicNum = 5
SET @FimcNum = 7
;WITH numeros AS (
SELECT number AS N
FROM master..spt_values
WHERE type = 'P'
AND number BETWEEN CAST(@InicNum AS varchar) AND CAST(@FimcNum AS varchar)
),
F1 AS(
select number as N from spt_values
where type = 'P'
AND number BETWEEN 1 AND 10
),
produto AS (
SELECT
M = n2.N,
F = n1.N,
P = n1.N * n2.N
FROM F1 n1
CROSS JOIN numeros n2
)
SELECT cast(M as varchar(2)) + ' x ' + cast(F as varchar(2)) + ' = ' + cast(P as varchar(3))
FROM produto
order by M
outra opção:
DECLARE @CALC1 INT, @CALC2 INT
DECLARE @NUM1 VARCHAR(500), @NUM2 VARCHAR(500) , @RESTO VARCHAR(500), @LINHA NVARCHAR(500)
SET @CALC1 = 1
WHILE @CALC1 <= 10 -- AQUI
BEGIN
SET @LINHA = @CALC1
SELECT '" TABUADA DO ' + CONVERT(VARCHAR(15),@LINHA) + ' "'
SET @CALC2 = 1
WHILE @CALC2 <= 10 --
BEGIN
SET @NUM1 = @CALC1
SET @NUM2 = @CALC2
SET @RESTO = @CALC1 * @CALC2
SELECT @NUM1 + 'X' + @NUM2 + ' = ' + @RESTO AS 'TABUDA'
SET @CALC2 = @CALC2 + 1
END
SET @CALC1 = @CALC1 + 1
END
Mais uma…
SET nocount on
go
declare @i int
set @i = 3
declare @f int
set @f = 20
declare @1 int set @1 = 1
declare @2 int set @2 = 2
declare @3 int set @3 = 3
declare @4 int set @4 = 4
declare @5 int set @5 = 5
declare @6 int set @6 = 6
declare @7 int set @7 = 7
declare @8 int set @8 = 8
declare @9 int set @9 = 9
declare @10 int set @10 = 10
WHILE @i <= @f
BEGIN
BEGIN
SELECT convert(varchar(2),@1)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@2)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@3)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@4)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@5)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@6)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@7)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@8)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@9)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
SELECT convert(varchar(2),@10)+'x'+convert(varchar(20),@i)+'='+convert(varchar(20),@i)
END
SET @i = @i + 1
END
E a última…
declare @i int
declare @y int
declare @num varchar(max)
declare @num2 varchar(max)
declare @res varchar(max)
-- Atribui @y = Tabuada começa do 1 -
set @y=1
-- Enquanto @y menor ou igual a 10, vai ate tabuada do 10 -
while @y<=10
-- Inicio 1
begin
-- Atribui @i = 1 começa com x 1, no caso 1 x 1 ou então(@y x @i )
set @i=1
-- Enquanto @i menor ou igual a 10 - vai ate x 10
while @i<=10
-- Inicio 2
begin
-- Atribui @num = @i
set @num = @i;
-- Atribui @num2 = @y
set @num2 = @y;
-- Atribui @res = @y * @i
set @res = @y*@i
-- Mostrando o Resultado da tabuada concatenando os resultados -
print @num2+'x'+@num+'='+@res
-- Atribui @s a ele mesmo + 1, 'próximo valor de @s' - soma para ir ao próximo numero -
set @i=@i+1
-- Inicio 2
end
-- Atribui @y a ele mesmo + 1, 'próximo valor de @y' - soma para ir a proxima tabuada -
set @y=@y+1
-- Imprime enter e '---------' enter - só o espaçamento entre tabuadas
print Char(13)+'----'+Char(13)
-- Fim Inicio 1
end