none
Erro de conversão varchar to float RRS feed

  • Pergunta

  • Boa tarde pessoas,

    Seguinte, estou na batalha com um relatório para um cliente e preciso criar uma query onde obtenha a porcentagem do desconto em relação ao valor bruto de uma parcela. Consegui, em partes porquê, ao executar a query, ela me traz o que preciso, porém, aparece também uma mensagem de erro informando: "Error converting data type varchar to float." e, lógico, quando transporto essa mesma query para o gerador de relatórios do meu ERP não funciona. Segue a dita cuja e, se alguém poderia me dar uma luz no fim do túnel, agradeceria.

    SELECT fmf.CodigoUnidade,
           fmf.AnoSemestre,
           fmf.CodigoCurso,
           fmf.Matricula,
           fp.Parcela,
           ftp.CodigoTipoParcela,
           ftp.DescricaoTipoParcela,
           fmf.Percentual,
           ROUND( SUM(((cast (replace (fmf.Percentual,',','.')AS FLOAT)) ) *100 /(cast (replace (fp.ValorParcela,',','.')AS FLOAT)) ),2) as Porcentagem,
           fp.ParcelaBaixada,
           fp.ValorParcela,
           afca.NomeAluno
    FROM Fin_MatriculaFinanceira AS fmf
    INNER JOIN Fin_TipoParcela AS ftp ON fmf.CodigoUnidade = ftp.CodigoUnidade
    AND fmf.TipoParcela = ftp.CodigoTipoParcela
    INNER JOIN Fin_Parcelas AS fp ON fmf.CodigoUnidade = fp.CodigoUnidade
    AND fmf.AnoSemestre = fp.AnoSemestre
    AND fmf.CodigoCurso = fp.CodigoCurso
    AND fmf.Matricula = fp.Matricula
    INNER JOIN Aca_FichaCadastralAluno AS afca ON afca.CodigoUnidade = fmf.CodigoUnidade
    AND afca.Matricula = fmf.Matricula
    WHERE ftp.Tipo IN ('Desconto', 'Bolsa')
    AND ftp.TipoCalculo = 'Valor Mensal da Parcelas Mensal do Aluno'
    AND fmf.CodigoUnidade = '1'
    AND fmf.AnoSemestre = 'Ano2019'
    --AND fp.Parcela = 'Out/2019'
    GROUP BY fmf.CodigoUnidade,
             fmf.AnoSemestre,
             fmf.CodigoCurso,
             fmf.Matricula,
             fp.Parcela,
             ftp.CodigoTipoParcela,
             ftp.DescricaoTipoParcela,
             fmf.Percentual,
             fp.ParcelaBaixada,
             fp.ValorParcela,
             afca.NomeAluno
    


    terça-feira, 22 de outubro de 2019 20:47

Respostas

  • Boa tarde,

    Pelo que entendi o tipo de dados das colunas fmf.Percentual e fp.ValorParcela é varchar ou semelhante.

    Se for isso mesmo e se os valores gravados nessas colunas tiver também o caractere separador de milhares (no caso o '.'), será necessário executar um Replace adicional para remover esse caractere.

    Espero que ajude 


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Glauber_CNF quarta-feira, 23 de outubro de 2019 13:40
    terça-feira, 22 de outubro de 2019 21:04

Todas as Respostas

  • Boa tarde,

    Pelo que entendi o tipo de dados das colunas fmf.Percentual e fp.ValorParcela é varchar ou semelhante.

    Se for isso mesmo e se os valores gravados nessas colunas tiver também o caractere separador de milhares (no caso o '.'), será necessário executar um Replace adicional para remover esse caractere.

    Espero que ajude 


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Glauber_CNF quarta-feira, 23 de outubro de 2019 13:40
    terça-feira, 22 de outubro de 2019 21:04
  • Deleted
    terça-feira, 22 de outubro de 2019 21:30
  • Ok, deixa eu tentar explicar, apesar da coluna se chamar Percentual, ela pode receber tanto um valor de desconto em valores absolutos quanto porcentagem, tudo depende de que parâmetro selecionar nas configurações iniciais do ERP. Uma fez configurado, todos os descontos gravados na tabela Fin_MatriculaFinanceira seguem o que foi selecionado, no caso passado, cliente escolheu trabalhar com valores absolutos.

    Já a coluna ValorParcela da tabela Fin_parcelas, guarda o valor bruto da parcela, sem desconto nenhum. 

    quarta-feira, 23 de outubro de 2019 05:29
  • Deleted
    quarta-feira, 23 de outubro de 2019 09:38
  • A função da linha 
    ROUND( SUM(((cast (replace (fmf.Percentual,',','.')AS FLOAT)) ) *100 /(cast (replace (fp.ValorParcela,',','.')AS FLOAT)) ),2) as Porcentagem,
    é para saber qual a porcentagem entre o campo fmf.percentual e fp.valorparcela.
    quarta-feira, 23 de outubro de 2019 12:26
  • Glauber, segue uma sugestão para teste considerando que o tipo de dados das colunas é varchar ou semelhante:

           ROUND
               ( cast( replace( replace(fmf.Percentual, '.', ''), ',', '.' ) AS FLOAT ) * 100 /
                 cast( replace( replace(fp.ValorParcela, '.', ''), ',', '.') AS FLOAT ), 2) as Porcentagem

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 23 de outubro de 2019 12:28
  • Deleted
    quarta-feira, 23 de outubro de 2019 12:37