Usuário com melhor resposta
Compar int com cast

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
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
- Marcado como Resposta Douglas a Fernandes terça-feira, 20 de maio de 2014 18:45
-
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
- Marcado como Resposta Douglas a Fernandes 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
-
-
Você experimentou da forma como sugeri?
Assinatura: http://www.imoveisemexposicao.com.br
-
-
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
-
da o mesmo erro
- Editado Douglas a Fernandes segunda-feira, 19 de maio de 2014 21:22
-
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
- Marcado como Resposta Douglas a Fernandes terça-feira, 20 de maio de 2014 18:45
-
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
- Marcado como Resposta Douglas a Fernandes terça-feira, 20 de maio de 2014 18:45