Converte números para extenso entre 0 e 999999999.99.
O código abaixo retorna o número por extenso no formato Real (R$). Para usar outros tipos, é só mudar o texto na última FUNCTION [dbo].[NExtenso].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | CREATE FUNCTION [dbo].[NExtenso_Extenso](@Num INTEGER) RETURNS VARCHAR(50) AS BEGIN -- Por Ycaro Afonso 03/12/2011 -- V 0.1 RETURN CASE @Num WHEN 1000 THEN 'Mil' WHEN 1000000 THEN 'Milhões' WHEN 1000000000 THEN 'Bilhões' WHEN 100 THEN 'Cento' WHEN 200 THEN 'Duzentos' WHEN 300 THEN 'Trezentos' WHEN 400 THEN 'Quatrocentos' WHEN 500 THEN 'Quinhentos' WHEN 600 THEN 'Seiscentos' WHEN 700 THEN 'Setecentos' WHEN 800 THEN 'Oitocentos' WHEN 900 THEN 'Novecentos' WHEN 10 THEN 'Dez' WHEN 11 THEN 'Onze' WHEN 12 THEN 'Doze' WHEN 13 THEN 'Treze' WHEN 14 THEN 'Quartorze' WHEN 15 THEN 'Quinze' WHEN 16 THEN 'Dezesseis' WHEN 17 THEN 'Dezesete' WHEN 18 THEN 'Dezoito' WHEN 19 THEN 'Dezenove' WHEN 20 THEN 'Vinte' WHEN 30 THEN 'Trinta' WHEN 40 THEN 'Quarenta' WHEN 50 THEN 'Cinquenta' WHEN 60 THEN 'Sessenta' WHEN 70 THEN 'Setenta' WHEN 80 THEN 'Oitenta' WHEN 90 THEN 'Noventa' 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' ELSE NULL END END GO CREATE FUNCTION [dbo].[NExtenso_Fator](@Num INTEGER) RETURNS INTEGER AS BEGIN -- Por Ycaro Afonso 03/12/2011 -- V 0.1 IF @Num < 10 RETURN 1 ELSE IF @Num < 100 RETURN 10 ELSE IF @Num < 1000 RETURN 100 ELSE IF @Num < 1000000 RETURN 1000 ELSE IF @Num < 1000000000 RETURN 1000000 ELSE IF @Num < 1000000000000 RETURN 1000000000 RETURN NULL END GO CREATE FUNCTION [dbo].[NExtenso_Convert](@Num DECIMAL(18, 6), @Fat DECIMAL(18, 6)) RETURNS VARCHAR(1000) AS BEGIN -- Por Ycaro Afonso 03/12/2011 -- V 0.1 DECLARE @Ret VARCHAR(1000), @_Num DECIMAL(18, 6) SET @Ret = '' SET @_Num = 0 IF @Fat > 0 BEGIN IF @Num = 1000000000 BEGIN SET @Ret = @Ret + ' Um Bilhão' END ELSE IF @Num = 1000000 BEGIN SET @Ret = @Ret + ' Um Milhão' END ELSE IF @Num = 1000 BEGIN SET @Ret = @Ret + ' Um Mil' END ELSE IF @Num = 100 BEGIN SET @Ret = @Ret + 'Cem' END ELSE IF @Num > 10 AND @Num < 20 BEGIN SET @Ret = @Ret + ISNULL(dbo.NExtenso_Extenso(@Num) + ' e ', '') END ELSE BEGIN IF @Fat >= 1000 BEGIN SET @_Num = CAST((@Num - (@Num % @Fat)) * (CAST(1 AS DECIMAL(18, 6)) / @Fat) AS INTEGER) IF @_Num = 1 BEGIN SET @Ret = @Ret + ISNULL(dbo.NExtenso_Convert(@Fat, @Fat * .1), '') END ELSE BEGIN SET @Ret = @Ret + ISNULL(dbo.NExtenso_Convert(@_Num, dbo.NExtenso_Fator(@_Num)), '') + ' ' + ISNULL(dbo.NExtenso_Extenso(@Fat), '') END SET @_Num = @Num - (@_Num * @Fat) SET @Fat = dbo.NExtenso_Fator(@_Num) SET @Ret = @Ret + CASE WHEN (@Fat > 100 OR @Fat < 100) AND CAST((@_Num - (@_Num % @Fat)) * (CAST(1 AS DECIMAL(18, 6)) / @Fat) AS INTEGER) < 100 THEN ' e ' ELSE ', ' END + ISNULL(dbo.NExtenso_Convert(@_Num, @Fat), '') END ELSE BEGIN SET @_Num = @Num - (@Num % @Fat) SET @Ret = @Ret + ISNULL(dbo.NExtenso_Extenso(@_Num) + ' e ', '') + dbo.NExtenso_Convert(@Num - @_Num, @Fat * .1) END END END RETURN REPLACE(REPLACE(@Ret + '.', ' e .', ''), '.', '') END GO CREATE FUNCTION [dbo].[NExtenso](@Num DECIMAL(15, 2)) RETURNS VARCHAR(1000) AS BEGIN -- Por Ycaro Afonso 03/12/2011 -- V 0.4 DECLARE @Ret VARCHAR(500) IF @Num > 0 BEGIN SET @Ret = '' SET @Ret = dbo.NExtenso_Convert(@Num, dbo.NExtenso_Fator(@Num)) + CASE FLOOR(@Num) WHEN 0 THEN '' WHEN 1 THEN ' Real' ELSE ' Reais' END + CASE FLOOR(@Num) WHEN 0 THEN '' ELSE ' e ' END SET @Num = @Num - FLOOR(@Num) IF @Num > 0 BEGIN --WHILE @Num - FLOOR(@Num) > 0 BEGIN -- SET @Num = @Num / .1 --END SET @Num = REPLACE(CAST(@Num AS VARCHAR(20)), '0.', '') SET @Ret = @Ret + dbo.NExtenso_Convert(@Num, dbo.NExtenso_Fator(@Num)) + CASE @Num WHEN 1 THEN ' Centavo' ELSE ' Centavos' END END END ELSE BEGIN SET @Ret = 'Zero Reais' END RETURN @Ret END GO -- Exemplo SELECT dbo.NExtenso(0) |






