none
Compar int com cast RRS feed

  • Pergunta

  • pessoal eu tenho um campo char(3) onde os valores fica exemplo '023'

    eu preciso Comparalos, quando eu faço um testes com variaveis, igual fiz aqui funciona, so que quando eu coloco na consulta ela da erro de converção



    DECLARE @ULTFECH CHAR(3),@RETORNO VARCHAR(10)
    SET @ULTFECH = '045'

    --(CAST(@ULTFECH AS INT) = 

    IF  ((CAST(@ULTFECH AS INT) =  (CAST(@ULTFECH AS INT) - 25) )) 
        SET @RETORNO = 'OK'
    ELSE
        SET @RETORNO = 'DIF'


    SELECT @RETORNO

    ------------------------------

    Conversion failed when converting the varchar value ' AND ((CAST(T.ULTFECH AS INT) = (CAST(CTC.ULTFECH AS INT) - ' to data type int.

    a linha é essa  ' AND ((CAST(T.ULTFECH AS INT) = (CAST(CTC.ULTFECH AS INT) - '+ @DIFLOTES+') ))' 

     um campo int DIFLOTES

    segunda-feira, 19 de maio de 2014 14:54

Respostas

  • Reparei agora que tem um Cast a mais na sugestão anterior:

    ' WHERE T.PROCESSADA = ''N'' ' + 
    ' AND T.CODCLI  = ' + CHAR(39) + @CODCLI  + CHAR(39) +
    ' AND case ' +
    '         when ' +
    '             ISNUMERIC(T.ULTFECH) = 1 and ' +
    '             ISNUMERIC(CTC.ULTFECH) = 1 and ' +
    '             CAST(T.ULTFECH AS INT) = CAST(CTC.ULTFECH AS INT) - ' + @DIFLOTES +
    '             then 1 ' +
    '             else 0 ' +
    '     end = 1'
    

    Espero que ajude.


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

    segunda-feira, 19 de maio de 2014 21:40
  • gapimex boa tarde, o meu erro era que a minha variavel @DIFLOTES estava declarada como inte e eu não fazia um cast com ela tambem

    AND (CAST(T.ULTFECH AS INT) = (CAST(CTC.ULTFECH AS INT) - '+ CAST(@DIFLOTES AS VARCHAR)+') )

    assim que fiz funcionou obrigado

    terça-feira, 20 de maio de 2014 18:45

Todas as Respostas

  • Bom dia,

    Esse trecho está em que parte da consulta? Na Where?

    Se for experimente adicionar a função IsNumeric para verificar se o valor da coluna é numérico antes do Cast:

    where 
        case 
            when 
                ISNUMERIC(T.ULTFECH) = 1 and
                ISNUMERIC(CTC.ULTFECH) = 1 and
                CAST(CAST(T.ULTFECH AS INT) = CAST(CTC.ULTFECH AS INT) - CTC.DIFLOTES 
                then 1
                else 0 
        end = 1

    obs: o case pode ser dispensável dependendo do local onde está o trecho 

    Espero que ajude.


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

    • Sugerido como Resposta Giovani Cr segunda-feira, 19 de maio de 2014 19:16
    segunda-feira, 19 de maio de 2014 15:19
  • no where
    segunda-feira, 19 de maio de 2014 16:34
  • Você experimentou da forma como sugeri?

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

    segunda-feira, 19 de maio de 2014 17:16
  • não pq eu preciso colocar dentro dessa expressão

                               ' WHERE T.PROCESSADA = ''N'' '+ 
                                  ' AND T.CODCLI  = ' +CHAR(39) +@CODCLI  + CHAR(39)+
                                  ' AND (CAST(T.ULTFECH AS INT) = (CAST(CTC.ULTFECH AS INT) - '+ @DIFLOTES+') ) ' 

    segunda-feira, 19 de maio de 2014 19:34
  • Experimente fazer um teste:

    ' WHERE T.PROCESSADA = ''N'' ' + 
    ' AND T.CODCLI  = ' + CHAR(39) + @CODCLI  + CHAR(39) +
    ' AND case ' +
    '         when ' +
    '             ISNUMERIC(T.ULTFECH) = 1 and ' +
    '             ISNUMERIC(CTC.ULTFECH) = 1 and ' +
    '             CAST(CAST(T.ULTFECH AS INT) = CAST(CTC.ULTFECH AS INT) - ' + @DIFLOTES +
    '             then 1 ' +
    '             else 0 ' +
    '     end = 1'

    Espero que ajude.


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

    segunda-feira, 19 de maio de 2014 20:02
  • da o mesmo erro

    segunda-feira, 19 de maio de 2014 21:16
  • Reparei agora que tem um Cast a mais na sugestão anterior:

    ' WHERE T.PROCESSADA = ''N'' ' + 
    ' AND T.CODCLI  = ' + CHAR(39) + @CODCLI  + CHAR(39) +
    ' AND case ' +
    '         when ' +
    '             ISNUMERIC(T.ULTFECH) = 1 and ' +
    '             ISNUMERIC(CTC.ULTFECH) = 1 and ' +
    '             CAST(T.ULTFECH AS INT) = CAST(CTC.ULTFECH AS INT) - ' + @DIFLOTES +
    '             then 1 ' +
    '             else 0 ' +
    '     end = 1'
    

    Espero que ajude.


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

    segunda-feira, 19 de maio de 2014 21:40
  • gapimex boa tarde, o meu erro era que a minha variavel @DIFLOTES estava declarada como inte e eu não fazia um cast com ela tambem

    AND (CAST(T.ULTFECH AS INT) = (CAST(CTC.ULTFECH AS INT) - '+ CAST(@DIFLOTES AS VARCHAR)+') )

    assim que fiz funcionou obrigado

    terça-feira, 20 de maio de 2014 18:45