2017-05-23 79 views
-1

我试图将下列内容转换为整数,以便我可以执行计算,从123.456.789123456789将SQL Server中的varchar强制转换为INT

然而,当我尝试

CAST([Total number] AS INT) 

OR

CONVERT(int, [Total number]) 

然后我得到一个错误的转换VARCHAR值 '123.456.789' 数据类型时

转换失败INT。

+0

你需要这样123456789 –

+0

这正是正确 – Probs

+0

添加'WHERE替换([总数], '', '')NOT LIKE '%[^ 0-9]%' '以确保只有整数被转换。 – jarlh

回答

3

假设点是不是一个小数分频器和你的电话号码是整数(不浮动/十进制) - 你可以从你的字符串转换像之前删除点:

CAST(replace([Total number], '.', '') AS int) 
4
Declare @val varchar(100)='123.456.789' 

SELECT CAST (REPLACE (@val,'.','') AS INT) As Intval 
+0

但是现在您只声明了1个值,在我的示例中为1。你会如何做到这一点多列或多个值?最好使用UPDATE和SET NO? – Probs

0

您可以使用try_convert或try_cast即使有任何特殊字符,它会在这种情况下

Select try_convert(int, replace([Total number], '.', '')) 
+0

不错的一个!谢谢Kannan :) – Probs

0

返回null这是你的要求如下

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 
相关问题