none
Como tranformmar um resultado no formato para valor como no Exemplo ( 60.750,00) por SQL RRS feed

  • Pergunta

  • Olá,

    Estou montando uma SQL e preciso que ele me traga um resultado no formato de moeda, como por exemplo ( 61.811,11). mas o resultado que  visualizo é 6181111

    sexta-feira, 9 de setembro de 2016 13:40

Respostas

Todas as Respostas

  • Algo assim te ajuda 

    DECLARE @VALOR  DECIMAL(15,2)
    DECLARE @X  INT

    SET @VALOR  = 2111113.55
    SET @X = CASE   WHEN LEN(@VALOR) BETWEEN 1 AND 6 THEN 3
                    WHEN LEN(@VALOR) BETWEEN 7 AND 9 THEN 2
                    WHEN LEN(@VALOR) BETWEEN 10 AND 12 THEN 1 
                    WHEN LEN(@VALOR) BETWEEN 13 AND 15 THEN 0 END

    SELECT REPLACE(LEFT(convert(varchar,cast(@VALOR as money),1),(LEN(@VALOR)-@X)),',','.')  + ',' + RIGHT(@VALOR,2)

    fonte:http://pt.stackoverflow.com/questions/38455/retorno-de-casas-decimais-em-consultas-do-sqlserver


    Wesley Neves

    sexta-feira, 9 de setembro de 2016 13:50
  • Deleted
    sexta-feira, 9 de setembro de 2016 14:06
  • Ola Wesley,

    Não sei como colocar isto na minha SQL. Eu utilizo a Oracle SQL Developer

    Minha SQL está desta forma

    Select DISTINCT RPKCO as Company, rpan8,rpvinv AS INVOICE_NUMBER,rpag AS Gross_Amount from proddta.f0411
    where TRIM(RPKCO) IN ('00308', '00310', '00310')
    and trim(rpan8) in ('184820')
    and rpag > 0

    Resultado:

    sexta-feira, 9 de setembro de 2016 14:08
  • Eu utilizo a Oracle SQL Developer

    Minha SQL está desta forma:

    Select DISTINCT RPKCO as Company, rpan8,rpvinv AS INVOICE_NUMBER,rpag AS Gross_Amount

    from proddta.f0411
    where TRIM(RPKCO) IN ('00308', '00310', '00310')
    and trim(rpan8) in ('184820')
    and rpag > 0

    Resultado:

    COMPANY RPAN8 INVOICE_NUMBER GROSS_AMOUNT
    00310 184820 003435N                   129360
    00310 184820 003561N                   148764
    00310 184820 003634N                   50568

    sexta-feira, 9 de setembro de 2016 14:15
  • vc pode criar uma function ,algo assim

    CREATE FUNCTION Helper.FormataCasasDecimais(@texto VARCHAR(20))
    RETURNS VARCHAR(20)
    BEGIN
      
    
     
    DECLARE @VALOR  DECIMAL(15,2), @X  INT, @retorno VARCHAR(20)
    
    SET @VALOR  = CAST(@texto AS DECIMAL(15,0));
    
    SET @X = CASE   WHEN LEN(@VALOR) BETWEEN 1 AND 6 THEN 3
                    WHEN LEN(	) BETWEEN 7 AND 9 THEN 2
                    WHEN LEN(@VALOR) BETWEEN 10 AND 12 THEN 1 
                    WHEN LEN(@VALOR) BETWEEN 13 AND 15 THEN 0 END
    
    SET @retorno =  REPLACE(LEFT(convert(varchar,cast(@VALOR as money),1),(LEN(@VALOR)-@X)),',','.')  + ',' + RIGHT(@VALOR,2)
    
    
    RETURN @retorno
    end

    e fazer o select no seu campo

    SELECT L.TotalDebito,Helper.FormataCasasDecimais(l.TotalCredito) FROM dbo.Lancamentos AS L

    Agora vamos ater a um detalhe,essas formatações não e recomendável fazer no banco de dados conforme o nosso amigo   José Diz

    fazer no banco e a melhor opção para seu negócio???


    Wesley Neves

    sexta-feira, 9 de setembro de 2016 14:21
  • Deleted
    sexta-feira, 9 de setembro de 2016 14:29
  • Olá Jose,

    o valor que eu quero que traga é 1.293,60

    COMPANY RPAN8 INVOICE_NUMBER GROSS_AMOUNT   
    00310 184820 003435N                   129360

    Resultado esperado

    COMPANY RPAN8 INVOICE_NUMBER GROSS_AMOUNT   
    00310 184820 003435N                   1.293,60

    Não sei como incluir na minha SQL

    Select DISTINCT RPKCO as Company,rpan8, rpvinv AS INVOICE_NUMBER, rpag AS Gross_Amount,
    where TRIM(RPKCO) IN ('00308', '00310', '00310')
    and trim(rpan8) in ('184820')

    sexta-feira, 9 de setembro de 2016 16:30
  • Um jeito bem simples no SQL, seria usar a função FORMAT(), mas pode fazer a sua própria função com a lógica abaixo:

    DECLARE @VL Numeric(18,2),

            @FM Varchar(50),

            @PS SmallInt;

    SELECT @VL = 54869875416.32,

           @FM = REPLACE(CAST(@VL AS Varchar(20)),'.',','),

           @PS = CHARINDEX(',',@FM);

    WHILE (@PS > 4)

    BEGIN

        SELECT @FM = STUFF(@FM,@PS-3,0,'.'),

               @PS = @PS -3;

    END

    SELECT @FM

    • Sugerido como Resposta Zé Bill quinta-feira, 22 de setembro de 2016 16:34
    quinta-feira, 22 de setembro de 2016 16:34