none
Dúvida comando FM dentro da estrutura CASE RRS feed

  • Pergunta

  • Prezados, bom dia.

               Preciso substituir um "." por uma "," num calculo do meu select. Eventualmente utilizo o comando 'FM999999999990D00'),'.',',' para fazer essa substituição. Entretanto, dento do comando CASE ele não está permitindo conforme print anexo.

    SELECT M.numnota,
                replace (to_char ((m.qt * m.punit) ,'FM999999999990D00'),'.',',') VLtotal,
    case   when p.classe = 'A' 
           and u.tipovend = 'I'
              THEN  '' || to_char((((m.qt * m.punit) * 0.015),'FM999999999990D00'),'.',',')
           when p.classe = 'A' 
           and u.tipovend = 'E'
              THEN  '' || to_char((((m.qt * m.punit) * 0.015),'FM999999999990D00'),'.',',')
           when p.classe = 'A' 
           and u.tipovend = 'R'
               THEN '' || to_char (m.qt * m.punit) * 0.03
           when p.classe = 'B' 
           and u.tipovend = 'I'
               THEN '' || to_char (m.qt * m.punit) * 0.015
         end AS PERCENTUAL 
                        
    FROM PCMOV  M, pcprodut p, pcusuari u, pcnfent e
    WHERE m.dtmov BETWEEN (:DTINI) AND (:DTFIM)
     -- and m.numnota = e.numnota
      and m.codprod = p.codprod
      and m.codusur = u.codusur
      AND M.codoper = 'ED'
      AND M.DTCANCEL IS NULL
      AND M.codfilial = 1
      --and m.codoper =1
      AND M.QTCONT > 0
      AND M.STATUS IN ('A', 'AB')
    GROUP BY M.CODPROD, M.DESCRICAO, M.CODFISCAL, M.NUMNOTA, M.NUMTRANSVENDA, m.dtmov, M.codst, m.qt,m.punit,
            p.classe,
           M.codusur,
           u.nome,
           u.tipovend       
           ORDER BY  m.NUMNOTA


    quarta-feira, 6 de março de 2013 12:06

Respostas

  • Alexandre, o to_char é como se fosse o cast do SQL Server, convertendo o valor para o tipo char e o '||' é o símbolo de concatenação no Oracle.

    Thiago, 

    Se não estou enganado, o teu SGBD é Oracle, correto?

    Se positivo, te indicaria procurar um forum especializado em Oracle. Apesar de muitos DBA trabalhar com os 2 SGBD's, acredito que em outro forum você conseguirá um retorno muito mais rápido.

    Abraços.

    quarta-feira, 6 de março de 2013 13:36

Todas as Respostas

  • Thiago, bom dia ! voce esta utilizando o sql server ou outro SGBD ? o que seria este to_char dentro do replace ? e os pipes (||) ? tentei fazer um parse do seu codigo e da erro logo de cara nestes pontos.

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 6 de março de 2013 12:34
  • Alexandre, o to_char é como se fosse o cast do SQL Server, convertendo o valor para o tipo char e o '||' é o símbolo de concatenação no Oracle.

    Thiago, 

    Se não estou enganado, o teu SGBD é Oracle, correto?

    Se positivo, te indicaria procurar um forum especializado em Oracle. Apesar de muitos DBA trabalhar com os 2 SGBD's, acredito que em outro forum você conseguirá um retorno muito mais rápido.

    Abraços.

    quarta-feira, 6 de março de 2013 13:36
  • Agora faz sentido Logan, ja que tentei fazer o parse para ajudar o amigo e o SQL não reconheceu este comando.

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 6 de março de 2013 13:43
  • Alexandre,

    Isso mesmo estes comandos são específicos do Oracle!!!

    Como por exemplo no SQL Server para realizar a concatenação de Strings você poderia utilizar o sinal de + ou na versão 2012 a função Concat!!!

    Além da função Cast existe também a função Convert para realizar conversão de dados e que podem ser utilizadas no SQL Server em similar a outros SGBDs como por exemplo o MySQL.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 9 de março de 2013 17:03