Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Christophe

Real no sql

Recommended Posts

bons dias,

fiz uma função em sql para poder fazer listagem de racios de adições e etc ...

 

O que esta a acontecer é que ele aredonda o valor quando nao devia. ja tentei de tudo mas nada.

 

Aqui vai a parte do codigo da função que nao esta a dar certo:

DECLARE @Mes INT, @Ano INT, @idProduto INT
	DECLARE @DiasMes INT, @DataDif INT, @MesProcura INT, @AnoProcura INT, @Existe INT 
	DECLARE @DataLeituraInicial DATETIME, @DataLeituraFinal DATETIME, @UltimaDataLeitura DATETIME
	DECLARE @Unidade VARCHAR(10), @UnidadeO INT, @UnidadeD INT
	DECLARE @QtInicial REAL, @QtFinal REAL, @QtConsumida REAL, @MediaConsumida REAL, @Qt REAL
	DECLARE @DataFiltroInicial VARCHAR(10), @DataFiltroFinal VARCHAR(10)
	set @Mes = 7
	set @Ano = 2009
	Set @idProduto = 4
	-- ####### Inicio e fim do mes ##########
	SET @DataFiltroInicial = '1-' + CONVERT(VARCHAR, @Mes) + '-' + CONVERT(VARCHAR, @Ano)
	PRINT @DataFiltroInicial
	SET @DataFiltroFinal = CONVERT(VARCHAR, dbo.fGetLastDayOfMonth(@Ano, @Mes)) + '-' + CONVERT(VARCHAR, @Mes) + '-' + CONVERT(VARCHAR,@Ano)
	PRINT @DataFiltroFinal
	--#######################################
	Set @Existe = 0
	set @MesProcura = @Mes-1
	if @MesProcura = 0 
		set @MesProcura  = 12
	set @AnoProcura = @Ano
	-- ######### CASO NÃO EXISTE REGISTOS NO MÊS  ###########
	IF (EXISTS(SELECT 
			TblLeiturasMatPrimas.idUnidadeAlternativa
		FROM
			TblLeiturasMatPrimas
		WHERE
			(Activo = 1) AND
			(TblLeiturasMatPrimas.DataLeitura > CONVERT(DATETIME, @DataFiltroFinal + ' 23:59:59', 105)))) AND
		(EXISTS(SELECT 
			TblLeiturasMatPrimas.idUnidadeAlternativa
		FROM
			TblLeiturasMatPrimas
		WHERE
			(Activo = 1) AND
			(TblLeiturasMatPrimas.DataLeitura < CONVERT(DATETIME, @DataFiltroInicial + ' 00:00:00', 105)))
	)
	BEGIN
		SET @DiasMes = DATEDIFF (dd, CONVERT(SMALLDATETIME, @DataFiltroInicial, 105), CONVERT(SMALLDATETIME, @DataFiltroFinal, 105)) + 1
		SET @Existe = 0
		SET @AnoProcura = @Ano
		SET @MesProcura= @Mes + 1
		IF @MesProcura = 13
		BEGIN
			SET @MesProcura = @MesProcura + 1
			SET @AnoProcura = @Ano + 1
		END
		PRINT 'Dias Do mes:' + convert(varchar,@DiasMes)
		--########################## PARA A FRENTE #####################
		WHILE @Existe <> 1
		BEGIN
			IF EXISTS(SELECT TOP (1) 
				TblLeiturasMatPrimas.idUnidadeAlternativa
			FROM
				TblLeiturasMatPrimas INNER JOIN
				TblProdutos ON TblLeiturasMatPrimas.idProduto = TblProdutos.idProduto
			WHERE
				(TblLeiturasMatPrimas.Activo = 1) AND
				(TblLeiturasMatPrimas.idProduto = @idProduto) AND 
				(TblLeiturasMatPrimas.DataLeitura >= CONVERT(DATETIME, '1-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR, @AnoProcura) + ' 00:00:00', 105)) AND
				(TblLeiturasMatPrimas.DataLeitura <= CONVERT(DATETIME, CONVERT(VARCHAR, dbo.fGetLastDayOfMonth(@AnoProcura, @MesProcura)) + '-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR,@AnoProcura) + ' 23:59:59', 105))
			ORDER BY DataLeitura ASC
			)
			BEGIN
				SELECT TOP (1) 
					@UnidadeO = TblUnidadesAlternativas.idUnidade, 
					@UnidadeD = TblProdutos.idUnidade, 
					@Qt = TblLeiturasMatPrimas.Qt,
					@DataLeituraInicial = TblLeiturasMatPrimas.DataLeitura
				FROM
					TblLeiturasMatPrimas INNER JOIN
					TblProdutos ON TblLeiturasMatPrimas.idProduto = TblProdutos.idProduto INNER JOIN
					TblUnidades ON TblProdutos.idUnidade = TblUnidades.idUnidade INNER JOIN
					TblUnidadesAlternativas ON TblLeiturasMatPrimas.idUnidadeAlternativa = TblUnidadesAlternativas.idUnidadeAlternativa
				WHERE
					(TblLeiturasMatPrimas.Activo = 1) AND
					(TblLeiturasMatPrimas.idProduto = @idProduto) AND 
					(TblLeiturasMatPrimas.DataLeitura >= CONVERT(DATETIME, '1-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR, @AnoProcura) + ' 00:00:00', 105)) AND
					(TblLeiturasMatPrimas.DataLeitura <= CONVERT(DATETIME, CONVERT(VARCHAR, dbo.fGetLastDayOfMonth(@AnoProcura, @MesProcura)) + '-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR,@AnoProcura) + ' 23:59:59', 105))
				ORDER BY DataLeitura ASC
				SET @Existe = 1
				SET @QtFinal= dbo.fConverteUnidade(@UnidadeO, @UnidadeD, @Qt)
				PRINT 'Qt Final:' + Convert(varchar, @QtFinal)
			END
			ELSE
			BEGIN 
				SET @Existe = 0
				SET @MesProcura = @MesProcura + 1
				IF @MesProcura = 13
					BEGIN
						set @MesProcura = 1
						Set @AnoProcura = @AnoProcura + 1
					END
			END
		END
		--########################## PARA TRAS #####################
		SET @Existe = 0
		SET @MesProcura= @Mes - 1
		SET @AnoProcura = @Ano
		IF @MesProcura = 0
		BEGIN
			SET @MesProcura = 12
			SET @AnoProcura = @AnoProcura -1
		END
		WHILE @Existe <> 1
		BEGIN
			IF EXISTS(SELECT TOP (1) 
				TblLeiturasMatPrimas.idUnidadeAlternativa
			FROM
				TblLeiturasMatPrimas INNER JOIN
				TblProdutos ON TblLeiturasMatPrimas.idProduto = TblProdutos.idProduto
			WHERE
				(TblLeiturasMatPrimas.Activo = 1) AND
				(TblLeiturasMatPrimas.idProduto = @idProduto) AND 
				(TblLeiturasMatPrimas.DataLeitura >= CONVERT(DATETIME, '1-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR, @AnoProcura) + ' 00:00:00', 105)) AND
				(TblLeiturasMatPrimas.DataLeitura <= CONVERT(DATETIME, CONVERT(VARCHAR, dbo.fGetLastDayOfMonth(@AnoProcura, @MesProcura)) + '-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR,@AnoProcura) + ' 23:59:59', 105))
			ORDER BY DataLeitura DESC
			)
			BEGIN
				SELECT TOP (1) 
					@UnidadeO = TblUnidadesAlternativas.idUnidade, 
					@UnidadeD = TblProdutos.idUnidade, 
					@Qt = TblLeiturasMatPrimas.Qt,
					@DataLeituraFinal = TblLeiturasMatPrimas.DataLeitura
				FROM
					TblLeiturasMatPrimas INNER JOIN
					TblProdutos ON TblLeiturasMatPrimas.idProduto = TblProdutos.idProduto INNER JOIN
					TblUnidades ON TblProdutos.idUnidade = TblUnidades.idUnidade INNER JOIN
					TblUnidadesAlternativas ON TblLeiturasMatPrimas.idUnidadeAlternativa = TblUnidadesAlternativas.idUnidadeAlternativa
				WHERE
					(TblLeiturasMatPrimas.Activo = 1) AND
					(TblLeiturasMatPrimas.idProduto = @idProduto) AND 
					(TblLeiturasMatPrimas.DataLeitura >= CONVERT(DATETIME, '1-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR, @AnoProcura) + ' 00:00:00', 105)) AND
					(TblLeiturasMatPrimas.DataLeitura <= CONVERT(DATETIME, CONVERT(VARCHAR, dbo.fGetLastDayOfMonth(@AnoProcura, @MesProcura)) + '-' + CONVERT(VARCHAR, @MesProcura) + '-' + CONVERT(VARCHAR,@AnoProcura) + ' 23:59:59', 105))
				ORDER BY DataLeitura DESC
				SET @Existe = 1
				SET @QtInicial = dbo.fConverteUnidade(@UnidadeO, @UnidadeD, @Qt) 
				PRINT 'Qt Inicial:' + Convert(varchar, @QtInicial)
			END
			ELSE
			BEGIN 
				SET @Existe = 0
				SET @MesProcura = @MesProcura - 1
				IF @MesProcura = 0
				BEGIN
					set @MesProcura = 12
					Set @AnoProcura = @AnoProcura - 1
				END
			END
		END	
		SET @DataDif = DATEDIFF (dd, CONVERT(SMALLDATETIME, @DataLeituraFinal, 105), CONVERT(SMALLDATETIME, @DataLeituraInicial, 105))
		Print @DataDif
		SET @MediaConsumida = (CONVERT(REAL, @QtFinal) - CONVERT(REAL, @QtInicial)) / CONVERT(REAL,(@DataDif))
		PRINT @MediaConsumida
		SET @QtConsumida = CONVERT(REAL, @DiasMes) * CONVERT(REAL, @MediaConsumida)
		PRINT CONVERT(REAL, @DiasMes)
		PRINT @QtConsumida
	END

e aqui estao os valores que ela me devolve na query :

 

1-7-2009
31-7-2009
Dias Do mes:31
Qt Final:50000
Qt Inicial:25000
32
781.25
31
24218.8

Compartilhar este post


Link para o post
Compartilhar em outros sites

quais os valores que são arredondados?

 

essa sua duvida não é de asp mas sem de sql server, acho que o pessoal podia mover pra lá

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.