NÚMERO POR EXTENSO EM SQL SERVER

 Tópico anterior Próximo tópico Novo tópico

NÚMERO POR EXTENSO EM SQL SERVER

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#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


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário