none
Converter valores SQL RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma function que está chamando um valor em data e preciso converter ele para varchar, só que não está indo,

    segue meu código para analise.

    SELECT DISTINCT 
                         SBO_BMRMedical.dbo.OSLP.SlpName, 
                         SBO_BMRMedical.dbo.ODLN.DocEntry AS [SAP],
                         SBO_BMRMedical.dbo.ODLN.DocDate, 
                         SBO_BMRMedical.dbo.ODLN.Serial AS [Nr NF], 
                         SBO_BMRMedical.dbo.ODLN.CardCode, 
                         SBO_BMRMedical.dbo.ODLN.CardName,  
                         SBO_BMRMedical.dbo.OUSG.Usage, 
                         SBO_BMRMedical.dbo.DLN1.ItemCode, 
                         SBO_BMRMedical.dbo.DLN1.Dscription, 
                         CASE COUNT( SBO_BMRMedical.dbo.IBT1.BatchNum) 
                         WHEN 0 THEN '' WHEN 1 THEN MAX(SBO_BMRMedical.dbo.IBT1.BatchNum) ELSE EasyOne.dbo.SBO_F_LoteConcatenado(SBO_BMRMedical.dbo.ODLN.ObjType, 
                         SBO_BMRMedical.dbo.ODLN.DocEntry, SBO_BMRMedical.dbo.DLN1.ItemCode) END AS [Nr Lote],
                         CASE COUNT( SBO_BMRMedical.dbo.IBT1.BatchNum) 
                         WHEN 0 THEN '' WHEN 1 THEN CONVERT (VARCHAR (50), MAX(SBO_BMRMedical.dbo.OBTN.ItemCode)) ELSE 
                         EasyOne.dbo.SBO_F_VencLoteConcatenado (SBO_BMRMedical.dbo.ODLN.ObjType, 
                         SBO_BMRMedical.dbo.ODLN.DocEntry, SBO_BMRMedical.dbo.DLN1.ItemCode) END Vencimento,
                         SBO_BMRMedical.dbo.DLN1.OpenQty, SBO_BMRMedical.dbo.DLN1.Price, 
                         SBO_BMRMedical.dbo.DLN1.OpenSum,
                         SBO_BMRMedical.dbo.ODLN.U_Paciente, 
                         SBO_BMRMedical.dbo.ODLN.U_Medico, 
                         SBO_BMRMedical.dbo.ODLN.U_DtCirurg, 
                         SBO_BMRMedical.dbo.ODLN.U_Convenio, 
                         SBO_BMRMedical.dbo.ODLN.U_NrAutori
    FROM         SBO_BMRMedical.dbo.ODLN INNER JOIN
                         SBO_BMRMedical.dbo.DLN1 ON SBO_BMRMedical.dbo.ODLN.DocEntry = SBO_BMRMedical.dbo.DLN1.DocEntry INNER JOIN
                         SBO_BMRMedical.dbo.OUSG ON SBO_BMRMedical.dbo.DLN1.Usage = SBO_BMRMedical.dbo.OUSG.ID LEFT OUTER JOIN
                         SBO_BMRMedical.dbo.OSLP ON SBO_BMRMedical.dbo.OSLP.SlpCode = SBO_BMRMedical.dbo.ODLN.SlpCode INNER JOIN
                         SBO_BMRMedical.dbo.OCRD ON SBO_BMRMedical.dbo.OCRD.CardCode = SBO_BMRMedical.dbo.ODLN.CardCode INNER JOIN
                         SBO_BMRMedical.dbo.OITM ON SBO_BMRMedical.dbo.OITM.ItemCode = SBO_BMRMedical.dbo.DLN1.ItemCode LEFT OUTER JOIN
                         SBO_BMRMedical.dbo.IBT1 ON SBO_BMRMedical.dbo.IBT1.ItemCode = SBO_BMRMedical.dbo.DLN1.ItemCode AND 
                         SBO_BMRMedical.dbo.IBT1.BaseEntry = SBO_BMRMedical.dbo.ODLN.DocEntry AND 
                         SBO_BMRMedical.dbo.IBT1.BaseType = SBO_BMRMedical.dbo.ODLN.ObjType 

    quinta-feira, 1 de junho de 2017 20:18

Respostas

  • Os valores retornados em todas as alternativas do Case devem ser de tipos de dados compatíveis.

    Desconfio que esse erro está ocorrendo por causa do valor retornado quando o valor é zero. Experimente fazer uns testes alterando:

    WHEN 0 THEN '' 
    

    para

    WHEN 0 THEN NULL
    

    Espero que ajude


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

    sexta-feira, 2 de junho de 2017 14:43

Todas as Respostas

  • Boa tarde, Humnardo.

    Tudo bem?

    Qual dos campos da consulta que você quer converter para varchar?

    quinta-feira, 1 de junho de 2017 21:04
  • Esse campo :

     WHEN 0 THEN '' WHEN 1 THEN CONVERT (VARCHAR (50), MAX(SBO_BMRMedical.dbo.OBTN.Expdate)) ELSE 
                         EasyOne.dbo.SBO_F_VencLoteConcatenado (SBO_BMRMedical.dbo.ODLN.ObjType, 

    sem essa linha roda a consulta

    sexta-feira, 2 de junho de 2017 11:18
  • Bom dia,

    Qual o tipo de dados do retorno de SBO_F_VencLoteConcatenado?

    Qual mensagem está sendo exibida?

    A query possui um Group By?


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


    • Editado gapimex sexta-feira, 2 de junho de 2017 12:29
    sexta-feira, 2 de junho de 2017 12:28
  • Bom dia @gapimex

    tem sim, eu colei errado, me desculpe,

    SELECT DISTINCT 
                          SBO_BMRMedical.dbo.OSLP.SlpName, 
                          SBO_BMRMedical.dbo.ODLN.DocEntry AS [SAP],
                          SBO_BMRMedical.dbo.ODLN.DocDate, 
                          SBO_BMRMedical.dbo.ODLN.Serial AS [Nr NF], 
                          SBO_BMRMedical.dbo.ODLN.CardCode, 
                          SBO_BMRMedical.dbo.ODLN.CardName,  
                          SBO_BMRMedical.dbo.OUSG.Usage, 
                          SBO_BMRMedical.dbo.DLN1.ItemCode, 
                          SBO_BMRMedical.dbo.DLN1.Dscription, 
                          CASE COUNT( SBO_BMRMedical.dbo.IBT1.BatchNum) 
                          WHEN 0 THEN '' WHEN 1 THEN MAX(SBO_BMRMedical.dbo.IBT1.BatchNum) ELSE EasyOne.dbo.SBO_F_LoteConcatenado(SBO_BMRMedical.dbo.ODLN.ObjType, 
                          SBO_BMRMedical.dbo.ODLN.DocEntry, SBO_BMRMedical.dbo.DLN1.ItemCode) END AS [Nr Lote],
                          CASE COUNT( SBO_BMRMedical.dbo.OBTN.ExpDate) 
                          WHEN 0 THEN '' WHEN 1 THEN max (CONVERT (datetime ,(SBO_BMRMedical.dbo.OBTN.ExpDate), (101))) ELSE 
                          EasyOne.dbo.SBO_F_VencLoteConcatenado (SBO_BMRMedical.dbo.ODLN.ObjType, 
                          SBO_BMRMedical.dbo.ODLN.DocEntry, SBO_BMRMedical.dbo.DLN1.ItemCode) END Vencimento,
                          SBO_BMRMedical.dbo.DLN1.OpenQty, SBO_BMRMedical.dbo.DLN1.Price, 
                          SBO_BMRMedical.dbo.DLN1.OpenSum,
                          SBO_BMRMedical.dbo.ODLN.U_Paciente, 
                          SBO_BMRMedical.dbo.ODLN.U_Medico, 
                          SBO_BMRMedical.dbo.ODLN.U_DtCirurg, 
                          SBO_BMRMedical.dbo.ODLN.U_Convenio, 
                          SBO_BMRMedical.dbo.ODLN.U_NrAutori
    FROM         SBO_BMRMedical.dbo.ODLN INNER JOIN
                          SBO_BMRMedical.dbo.DLN1 ON SBO_BMRMedical.dbo.ODLN.DocEntry = SBO_BMRMedical.dbo.DLN1.DocEntry INNER JOIN
                          SBO_BMRMedical.dbo.OUSG ON SBO_BMRMedical.dbo.DLN1.Usage = SBO_BMRMedical.dbo.OUSG.ID LEFT OUTER JOIN
                          SBO_BMRMedical.dbo.OSLP ON SBO_BMRMedical.dbo.OSLP.SlpCode = SBO_BMRMedical.dbo.ODLN.SlpCode INNER JOIN
                          SBO_BMRMedical.dbo.OCRD ON SBO_BMRMedical.dbo.OCRD.CardCode = SBO_BMRMedical.dbo.ODLN.CardCode INNER JOIN
                          SBO_BMRMedical.dbo.OITM ON SBO_BMRMedical.dbo.OITM.ItemCode = SBO_BMRMedical.dbo.DLN1.ItemCode LEFT OUTER JOIN
                          SBO_BMRMedical.dbo.IBT1 ON SBO_BMRMedical.dbo.IBT1.ItemCode = SBO_BMRMedical.dbo.DLN1.ItemCode AND 
                          SBO_BMRMedical.dbo.IBT1.BaseEntry = SBO_BMRMedical.dbo.ODLN.DocEntry AND 
                          SBO_BMRMedical.dbo.IBT1.BaseType = SBO_BMRMedical.dbo.ODLN.ObjType AND 
                          SBO_BMRMedical.dbo.IBT1.BaseLinNum = SBO_BMRMedical.dbo.DLN1.LineNum
                          left join SBO_BMRMedical.dbo.OBTN on SBO_BMRMedical.dbo.IBT1.BatchNum = OBTN.DistNumber and DLN1.ItemCode = OBTN.ItemCode
    WHERE     (SBO_BMRMedical.dbo.DLN1.Usage IN (3, 4,39)) AND SBO_BMRMedical.dbo.DLN1.OpenQty > 0 --and odln.DocEntry = '23121'
    GROUP BY SBO_BMRMedical.dbo.ODLN.DocEntry, SBO_BMRMedical.dbo.ODLN.ObjType, SBO_BMRMedical.dbo.ODLN.DocDate, SBO_BMRMedical.dbo.ODLN.Serial, 
                          SBO_BMRMedical.dbo.OCRD.U_IDSF, SBO_BMRMedical.dbo.ODLN.CardCode, SBO_BMRMedical.dbo.ODLN.CardName, SBO_BMRMedical.dbo.ODLN.U_Urgente, 
                          SBO_BMRMedical.dbo.ODLN.U_CondEnt, SBO_BMRMedical.dbo.ODLN.U_CondPgto, SBO_BMRMedical.dbo.ODLN.U_Consig, 
                          SBO_BMRMedical.dbo.ODLN.U_Expedido, SBO_BMRMedical.dbo.ODLN.U_Paciente, SBO_BMRMedical.dbo.ODLN.U_Medico, 
                          SBO_BMRMedical.dbo.ODLN.U_DtCirurg, SBO_BMRMedical.dbo.ODLN.U_Convenio, SBO_BMRMedical.dbo.ODLN.U_NrAutori, 
                          SBO_BMRMedical.dbo.ODLN.U_Cupom, SBO_BMRMedical.dbo.OSLP.SlpName, SBO_BMRMedical.dbo.OSLP.U_IDSF, SBO_BMRMedical.dbo.OUSG.Usage, 
                          SBO_BMRMedical.dbo.OITM.U_IDSF, SBO_BMRMedical.dbo.DLN1.ItemCode, SBO_BMRMedical.dbo.DLN1.Dscription, SBO_BMRMedical.dbo.DLN1.OpenQty, 
                          SBO_BMRMedical.dbo.DLN1.Price, SBO_BMRMedical.dbo.DLN1.OpenSum 

    O erro é esse :

    Mensagem 242, Nível 16, Estado 3, Linha 1
    A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.

    Os dado de retorno é data;

    Mensagem 242, Nível 16, Estado 3, Linha 1
    A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.


    sexta-feira, 2 de junho de 2017 14:27
  • Os valores retornados em todas as alternativas do Case devem ser de tipos de dados compatíveis.

    Desconfio que esse erro está ocorrendo por causa do valor retornado quando o valor é zero. Experimente fazer uns testes alterando:

    WHEN 0 THEN '' 
    

    para

    WHEN 0 THEN NULL
    

    Espero que ajude


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

    sexta-feira, 2 de junho de 2017 14:43
  • Eu alterei a ordem, do datetime e varchar e funcionou!

    Obrigado pela ajuda amigo.

    sexta-feira, 2 de junho de 2017 16:42