Usuário com melhor resposta
Erro no convert

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 DESCmensagem 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
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
-
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
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
-
-
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 -
-
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
-
-