none
Erro no convert RRS feed

  • Pergunta

  • Prezados esse sentença esta funcionando porem tive um problema, esse campo a alfanumerico, quando a pessoal digita numeto interiro tipo 8, ele funciona, porem quando eu digito tanto 7,2 ou 7.2 ele me retorna erro abaixo, ja ate sei quais colunas sao vejam..

    SQL

    SELECT 
    CASE WHEN C.CODCCUSTO IS NOT NULL THEN C.CODCCUSTO + ' - ' +G1.NOME
    ELSE BJ.CODCCUSTO + ' - ' + G.NOME END AS 'OBRA$$',

        OF1.IDOBJOF                             AS 'EQ',

    MAX(OF1.VALORACUMULADO1) - MIN(OF1.VALORACUMULADO1) AS 'HORA',
    MAX(OF1.VALORACUMULADO2) - MIN(OF1.VALORACUMULADO2) AS 'KM',
    SUM(CONVERT(INT,isnull(OF2.HORA1,0),1))  AS 'HT',
    SUM(CONVERT(INT,ISNULL(OF2.HORA ,0),1))  AS 'HD',
    SUM(CONVERT(INT,ISNULL(OF2.HORA2 ,0),1)) AS 'HM',
    SUM(CONVERT(INT,ISNULL(OF2.HORA3 ,0),1))  AS 'HO',
    SUM(CONVERT (INT,ISNULL(OF2.DIA,0),1))     AS 'DIA',
    BJ.CAMPOLIVREC1,
    BJ.CAMPOLIVREC2/*,
    P.FATURAR*/

    FROM OFHISTINDICADOR  AS OF1
     LEFT JOIN OFHISTINDICADORCOMPL AS OF2 ON
    OF2.IDHISTINDICADOR = OF1.IDHISTINDICADOR AND OF2.CODCOLIGADA = OF1.CODCOLIGADA
    AND OF2.IDOBJOF = OF1.IDOBJOF
    LEFT JOIN OFOBJOFICINA AS BJ ON BJ.CODCOLIGADA = OF1.CODCOLIGADA AND BJ.IDOBJOF = OF1.IDOBJOF
    LEFT JOIN OFOBJOFICINACCUSTO AS C ON C.CODCOLIGADA = OF1.CODCOLIGADA AND C.IDOBJOF    = OF1.IDOBJOF
    AND OF1.DATACOLETA <= c.DATASAIDA
    LEFT JOIN GCCUSTO AS G ON G.CODCOLIGADA = BJ.CODCOLIGADA AND G.CODCCUSTO = BJ.CODCCUSTO
    LEFT JOIN GCCUSTO AS G1 ON G1.CODCOLIGADA = C.CODCOLIGADA AND G1.CODCCUSTO = C.CODCCUSTO
    --LEFT JOIN OFOBJOFICINACOMPL AS P ON P.CODCOLIGADA = BJ.CODCOLIGADA AND P.IDOBJOF = BJ.IDOBJOF

    WHERE  OF1.DATACOLETA >= '2011-01-01' AND OF1.DATACOLETA <= '2011-07-30'
    AND OF1.IDOBJOF     =  'cm-02'
    GROUP BY OF1.IDOBJOF ,BJ.CODCCUSTO ,C.CODCCUSTO ,G.NOME,G1.NOME,C.DATAENTRADA,
    BJ.CAMPOLIVREC1,BJ.CAMPOLIVREC2--,P.FATURAR
    ORDER BY
    CASE WHEN C.CODCCUSTO IS NOT NULL THEN C.CODCCUSTO + ' - ' +G1.NOME
    ELSE BJ.CODCCUSTO + ' - ' + G.NOME END ,
    EQ ,
    C.DATAENTRADA  DESC

     

    mensagem de erro

     

    Msg 245, Level 16, State 1, Line 1
    Conversion failed when converting the varchar value ' 1.40' to data type int.

     

    os campos sao esses:

     

    SUM(CONVERT(INT,isnull(OF2.HORA1,0),1))  AS 'HT',
    SUM(CONVERT(INT,ISNULL(OF2.HORA ,0),1))  AS 'HD',
    SUM(CONVERT(INT,ISNULL(OF2.HORA2 ,0),1)) AS 'HM',
    SUM(CONVERT(INT,ISNULL(OF2.HORA3 ,0),1))  AS 'HO',
    SUM(CONVERT (INT,ISNULL(OF2.DIA,0),1))     AS 'DIA',

     

    obrigado pela ajuda

     

    quarta-feira, 17 de agosto de 2011 18:40

Respostas

  • Voce esta tentando converter numeros quebrados para inteiros, não sei o impacto que isso ira causa em sua query, todo caso, nessa instruções, basta colocar

     

    Atual:

    SUM(CONVERT(INT,isnull(OF2.HORA1,0),1))  AS 'HT',
    SUM(CONVERT(INT,ISNULL(OF2.HORA ,0),1))  AS 'HD',
    SUM(CONVERT(INT,ISNULL(OF2.HORA2 ,0),1)) AS 'HM', 
    SUM(CONVERT(INT,ISNULL(OF2.HORA3 ,0),1))  AS 'HO',
    SUM(CONVERT (INT,ISNULL(OF2.DIA,0),1))     AS 'DIA',

     

    Para não int

    SUM(CONVERT(DECIMAL(9,5),isnull(OF2.HORA1,0),1))  AS 'HT',
    SUM(CONVERT(DECIMAL(9,5),ISNULL(OF2.HORA ,0),1))  AS 'HD',
    SUM(CONVERT(DECIMAL(9,5),ISNULL(OF2.HORA2 ,0),1)) AS 'HM', 
    SUM(CONVERT(DECIMAL(9,5),ISNULL(OF2.HORA3 ,0),1))  AS 'HO',
    SUM(CONVERT (DECIMAL(9,5),ISNULL(OF2.DIA,0),1))     AS 'DIA',


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Sugerido como Resposta Fredy Esmeraldo quarta-feira, 17 de agosto de 2011 18:51
    • Marcado como Resposta Ronnie Von terça-feira, 18 de outubro de 2011 13:27
    quarta-feira, 17 de agosto de 2011 18:44
    Moderador
  • Ronnie,

     

    Desculpe a demora, o problema agora é que voce esta tentando converter dados que não são numericos para um datatype numerico, no caso, decimal, veja esse script abaixo, veja que estou fazendo utilização da função ISNUMERIC para me retornar o que é ou não numerico, se voce seguir o exemplo abaixo, vera que apenas dados que não podem ser convertidos serão retornado.

    DECLARE @tab TABLE (ID VARCHAR(100))

    INSERT INTO @tab VALUES

    ('1'),

    ('2'),

    ('3'),

    ('4'),

    ('a')

    select ID

    FROM @tab

    WHERE ISNUMERIC(id)<>1


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta Ronnie Von terça-feira, 18 de outubro de 2011 13:27
    quinta-feira, 18 de agosto de 2011 12:30
    Moderador

Todas as Respostas

  • Voce esta tentando converter numeros quebrados para inteiros, não sei o impacto que isso ira causa em sua query, todo caso, nessa instruções, basta colocar

     

    Atual:

    SUM(CONVERT(INT,isnull(OF2.HORA1,0),1))  AS 'HT',
    SUM(CONVERT(INT,ISNULL(OF2.HORA ,0),1))  AS 'HD',
    SUM(CONVERT(INT,ISNULL(OF2.HORA2 ,0),1)) AS 'HM', 
    SUM(CONVERT(INT,ISNULL(OF2.HORA3 ,0),1))  AS 'HO',
    SUM(CONVERT (INT,ISNULL(OF2.DIA,0),1))     AS 'DIA',

     

    Para não int

    SUM(CONVERT(DECIMAL(9,5),isnull(OF2.HORA1,0),1))  AS 'HT',
    SUM(CONVERT(DECIMAL(9,5),ISNULL(OF2.HORA ,0),1))  AS 'HD',
    SUM(CONVERT(DECIMAL(9,5),ISNULL(OF2.HORA2 ,0),1)) AS 'HM', 
    SUM(CONVERT(DECIMAL(9,5),ISNULL(OF2.HORA3 ,0),1))  AS 'HO',
    SUM(CONVERT (DECIMAL(9,5),ISNULL(OF2.DIA,0),1))     AS 'DIA',


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Sugerido como Resposta Fredy Esmeraldo quarta-feira, 17 de agosto de 2011 18:51
    • Marcado como Resposta Ronnie Von terça-feira, 18 de outubro de 2011 13:27
    quarta-feira, 17 de agosto de 2011 18:44
    Moderador
  • Fabrizzio usando conforme seu exemplo esta retornando uma outra mensagem de erro veja:

     

    Msg 8115, Level 16, State 8, Line 1
    Arithmetic overflow error converting varchar to data type numeric.

     

    Muito estranho..

     

    quarta-feira, 17 de agosto de 2011 18:53
  • Ronnie,

     

    O erro agora é que não coube na variavel, acredito que voce esteja manipulando dados grandes, ao invez de decimal (9,5), use decimal(30,5) por exemplo.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quarta-feira, 17 de agosto de 2011 18:54
    Moderador
  • Fabrizzio desculpas mais uma vez fiz usando o decimal(30,5), e me retornou essa mensagem.

     

     

    Msg 8114, Level 16, State 5, Line 1
    Error converting data type varchar to numeric.

    quarta-feira, 17 de agosto de 2011 19:09
  • Ronnie,

     

    Desculpe a demora, o problema agora é que voce esta tentando converter dados que não são numericos para um datatype numerico, no caso, decimal, veja esse script abaixo, veja que estou fazendo utilização da função ISNUMERIC para me retornar o que é ou não numerico, se voce seguir o exemplo abaixo, vera que apenas dados que não podem ser convertidos serão retornado.

    DECLARE @tab TABLE (ID VARCHAR(100))

    INSERT INTO @tab VALUES

    ('1'),

    ('2'),

    ('3'),

    ('4'),

    ('a')

    select ID

    FROM @tab

    WHERE ISNUMERIC(id)<>1


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta Ronnie Von terça-feira, 18 de outubro de 2011 13:27
    quinta-feira, 18 de agosto de 2011 12:30
    Moderador
  • Ok, fabrizzio vou verificar e ja retorno.
    quinta-feira, 18 de agosto de 2011 12:36
  • Bom dia, Fabrizzio desculpa a demora e que estive ausente por tempo, obrigado pela ajuda
    terça-feira, 18 de outubro de 2011 13:29