Cast ou converter varchar no servidor SQL para INT

estou a tentar converter o seguinte para um inteiro para poder fazer cálculos, de 123.456.789 para 123456789.

No entanto, quando tento

CAST([Total number] AS INT)

ou

CONVERT(int, [Total number])

então eu recebo um erro

a conversão falhou ao converter o valor varchar '123.456.789' para o tipo de dados int.

Author: marc_s, 2017-05-23

4 answers

Declare @val varchar(100)='123.456.789'

SELECT CAST (REPLACE (@val,'.','') AS INT) As Intval
 4
Author: , 2017-05-23 11:14:15

Assumindo que o ponto não é um separador de partes fractional e que o seu número é inteiro ( não flutuante / decimal) - pode apenas remover pontos do seu texto antes da conversão de algo do género:

CAST(replace([Total number], '.', '') AS int)
 3
Author: Andy Korneyev, 2017-05-23 11:13:34

Pode usar o try_convert ou o try_cast, mesmo que tenha alguns caracteres especiais, irá devolver nulo nesse caso

Select try_convert(int, replace([Total number], '.', ''))
 0
Author: Kannan Kandasamy, 2017-05-23 11:32:40

Este é o seu requisito abaixo

 Declare @val TABLE (ID INT IDENTITY,Val varchar(100))

INSERT INTO @val
SELECT '356.345.789' UNION ALL
SELECT '123.456.333' UNION ALL
SELECT '444.124.444' UNION ALL
SELECT '347.456.555' UNION ALL
SELECT '123.666.789' UNION ALL
SELECT '678.432.789' UNION ALL
SELECT '789.456.111' UNION ALL
SELECT '123.457.123' UNION ALL
SELECT '333.111.789'


SELECT ROW_NUMBER()OVER(Order by (SELECT 1)) AS Rno, 
       CAST(REPLACE (Val,'.','') AS INT) As Intval 
FROM @val
 0
Author: , 2017-05-23 12:35:35