Tópico anterior Próximo tópico Novo tópico
SQL / DATABASE
#482562 - 27/06/2018 20:55:19 | ||||
![]() PLUGSOFTSM SANTA MARIA Cadast. em:Julho/2015 ![]() |
Pessoal...
Desenvolvi essa função em sql server para retornar números por extenso. Precisava disso para contratos gerados pelo meu Sistema para os usuários. Se alguém precisar... aí está o código Para usar é só fazer : Select dbo.ValorExtenso(1254.63) Create Function [dbo].[ParteInteira](@NUM Int) Returns Varchar(50) AS Begin Declare @X1 VarChar(50) = '' DECLARE @AUX VARCHAR(50) DECLARE @V1 INT IF @NUM > 100 BEGIN SET @V1 = @NUM/100 SELECT @AUX = (CASE @V1 WHEN 1 THEN 'Cento' WHEN 2 THEN 'Duzentos' WHEN 3 THEN 'Trezentos' WHEN 4 THEN 'Quatrocentos' WHEN 5 THEN 'Quinhentos' WHEN 6 THEN 'Seicentos' WHEN 7 THEN 'Setessentos' WHEN 8 THEN 'Oitocentos' WHEN 9 THEN 'Novecentos' END) SET @NUM = @NUM - @V1*100 SET @X1 = @X1 + @aux + ' e ' END IF @NUM > 19 BEGIN SET @V1 = @NUM/10 SELECT @AUX = (CASE @V1 WHEN 2 THEN 'Vinte' WHEN 3 THEN 'Trinta' WHEN 4 THEN 'Quarenta' WHEN 5 THEN 'Cinquenta' WHEN 6 THEN 'Sessenta' WHEN 7 THEN 'Setenta' WHEN 8 THEN 'Oitenta' WHEN 9 THEN 'Noventa' END) SET @NUM = @NUM - @V1*10 SET @X1 = @X1 + @aux + ' e ' END SELECT @AUX = (CASE @NUM WHEN 1 THEN 'Um' WHEN 2 THEN 'Dois' WHEN 3 THEN 'Tres' WHEN 4 THEN 'Quatro' WHEN 5 THEN 'Cinco' WHEN 6 THEN 'Seis' WHEN 7 THEN 'Sete' WHEN 8 THEN 'Oito' WHEN 9 THEN 'Nove' WHEN 10 THEN 'Dez' WHEN 11 THEN 'Onze' WHEN 12 THEN 'Doze' WHEN 13 THEN 'Treze' WHEN 14 THEN 'Quatorze' WHEN 15 THEN 'Quinze' WHEN 16 THEN 'Dezesseis' WHEN 17 THEN 'Dezessete' WHEN 18 THEN 'Dezoito' WHEN 19 THEN 'Dezenove' END) SET @X1 = @X1 + @aux + ' e ' SET @X1 = LEFT(@X1, LEN(@X1) -2) RETURN @X1 End CREATE Function [dbo].[ValorExtenso](@Valor Decimal(18,2)) Returns VarChar(250) as Begin DECLARE @RETVAL VARCHAR(250) IF @VALOR = 1 RETURN 'Um Real' IF @VALOR = 100 RETURN 'Cem Reais' IF @VALOR = 1000 RETURN 'Mil Reais' IF @VALOR = 1000000 RETURN 'Um Milhão de Reais' IF @valor = 1000000000 RETURN 'Um Bilhão de Reais' IF @valor = 100000000000 RETURN 'Cem Bilhões de Reais' IF @VALOR >= 1000000000000 RETURN 'Número muito grande' DECLARE @VALINT BIGINT = CAST(@VALOR AS BIGINT) DECLARE @PARTINT VARCHAR(200) DECLARE @PARTDEC VARCHAR(200) DECLARE @AUX VARCHAR(100) = CAST(@VALOR AS VARCHAR(25)) DECLARE @POSIDIG TINYINT = CHARINDEX('.', @AUX,1) IF @POSIDIG > 0 SET @PARTDEC = SUBSTRING(@AUX,@POSIDIG+1, 25) DECLARE @VAL1 BIGINT IF @VALINT < 1000 BEGIN SET @PARTINT = DBO.ParteInteira(@VALINT) END ELSE IF @VALINT < 10000 BEGIN SET @VAL1 = @VALINT/1000 SET @PARTINT = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @VALINT = @VALINT - @VAL1*1000 IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 100000 BEGIN SET @VAL1 = @VALINT/1000 SET @PARTINT = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @VALINT = @VALINT - @VAL1*1000 IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 1000000 BEGIN SET @VAL1 = @VALINT/1000 SET @PARTINT = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @VALINT = @VALINT - @VAL1*1000 IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 10000000 BEGIN SET @VAL1 = @VALINT/1000000 SET @PARTINT = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @PARTINT = @PARTINT + ' Milhão' ELSE SET @PARTINT = @PARTINT + ' Milhões' SET @VALINT = @VALINT - @VAL1*1000000 IF @VALINT < 1000000 BEGIN SET @VAL1 = @VALINT/1000 SET @AUX = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000 END IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 100000000 BEGIN SET @VAL1 = @VALINT/1000000 SET @PARTINT = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @PARTINT = @PARTINT + ' Milhão' ELSE SET @PARTINT = @PARTINT + ' Milhões' SET @VALINT = @VALINT - @VAL1*1000000 IF @VALINT < 1000000 BEGIN SET @VAL1 = @VALINT/1000 SET @AUX = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000 END IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 1000000000 BEGIN SET @VAL1 = @VALINT/1000000 SET @PARTINT = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @PARTINT = @PARTINT + ' Milhão e ' ELSE SET @PARTINT = @PARTINT + ' Milhões e ' SET @VALINT = @VALINT - @VAL1*1000000 IF @VALINT < 1000000 AND @VALINT > 1000 BEGIN SET @VAL1 = @VALINT/1000 SET @AUX = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000 END ELSE BEGIN SET @PARTINT = @PARTINT + ' e ' END IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 10000000000 BEGIN SET @VAL1 = @VALINT/1000000000 SET @PARTINT = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @PARTINT = @PARTINT + ' Bilhão e ' ELSE SET @PARTINT = @PARTINT + ' Bilhões e ' SET @VALINT = @VALINT - @VAL1*1000000000 IF @VALINT >= 100000000 BEGIN SET @VAL1 = @VALINT/1000000 SET @AUX = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @AUX = @AUX + ' Milhão e ' ELSE SET @AUX = @AUX + ' Milhões e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000000 END IF @VALINT < 1000000 AND @VALINT > 1000 BEGIN SET @VAL1 = @VALINT/1000 SET @AUX = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000 END ELSE BEGIN SET @PARTINT = @PARTINT + ' e ' END IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 100000000000 BEGIN SET @VAL1 = @VALINT/1000000000 SET @PARTINT = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @PARTINT = @PARTINT + ' Bilhão e ' ELSE SET @PARTINT = @PARTINT + ' Bilhões e ' SET @VALINT = @VALINT - @VAL1*1000000000 IF @VALINT >= 100000000 BEGIN SET @VAL1 = @VALINT/1000000 SET @AUX = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @AUX = @AUX + ' Milhão e ' ELSE SET @AUX = @AUX + ' Milhões e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000000 END IF @VALINT < 1000000 AND @VALINT > 1000 BEGIN SET @VAL1 = @VALINT/1000 SET @AUX = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000 END ELSE BEGIN SET @PARTINT = @PARTINT + ' e ' END IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END ELSE IF @VALINT < 1000000000000 BEGIN SET @VAL1 = @VALINT/1000000000 SET @PARTINT = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @PARTINT = @PARTINT + ' Bilhão e ' ELSE SET @PARTINT = @PARTINT + ' Bilhões e ' SET @VALINT = @VALINT - @VAL1*1000000000 IF @VALINT >= 100000000 BEGIN SET @VAL1 = @VALINT/1000000 SET @AUX = DBO.ParteInteira(@VAL1) IF @VAL1 = 1 SET @AUX = @AUX + ' Milhão e ' ELSE SET @AUX = @AUX + ' Milhões e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000000 END IF @VALINT < 1000000 AND @VALINT > 1000 BEGIN SET @VAL1 = @VALINT/1000 SET @AUX = DBO.ParteInteira(@VAL1) + ' Mil e ' SET @PARTINT = @PARTINT + @AUX SET @VALINT = @VALINT - @VAL1*1000 END ELSE BEGIN SET @PARTINT = @PARTINT + ' e ' END IF @VALINT > 0 BEGIN SET @AUX = DBO.ParteInteira(@VALINT) SET @PARTINT = @PARTINT + @AUX END END -----------------------------Parte decimal do Número-------------------------------- IF @PARTDEC = '00' SET @PARTDEC = '' ELSE SET @PARTDEC = DBO.ParteInteira(CAST(@PARTDEC AS INT)) + ' Centavos' DECLARE @CENT INT IF @Valor = 0 Begin Return 'Zero Reais' End SET @RETVAL = @PARTINT IF @VALOR > 1 BEGIN IF @PARTDEC <> '' SET @PARTDEC = ' e ' + @PARTDEC SET @RETVAL = @RETVAL + ' Reais' + @PARTDEC END ELSE SET @RETVAL = @PARTDEC RETURN @RETVAL End ![]() ![]() |
|||
Tópico anterior Próximo tópico Novo tópico