我试图将下列内容转换为整数,以便我可以执行计算,从123.456.789
到123456789
。将SQL Server中的varchar强制转换为INT
然而,当我尝试
CAST([Total number] AS INT)
OR
CONVERT(int, [Total number])
然后我得到一个错误的转换VARCHAR值 '123.456.789' 数据类型时
转换失败INT。
我试图将下列内容转换为整数,以便我可以执行计算,从123.456.789
到123456789
。将SQL Server中的varchar强制转换为INT
然而,当我尝试
CAST([Total number] AS INT)
OR
CONVERT(int, [Total number])
然后我得到一个错误的转换VARCHAR值 '123.456.789' 数据类型时
转换失败INT。
假设点是不是一个小数分频器和你的电话号码是整数(不浮动/十进制) - 你可以从你的字符串转换像之前删除点:
CAST(replace([Total number], '.', '') AS int)
Declare @val varchar(100)='123.456.789'
SELECT CAST (REPLACE (@val,'.','') AS INT) As Intval
但是现在您只声明了1个值,在我的示例中为1。你会如何做到这一点多列或多个值?最好使用UPDATE和SET NO? – Probs
您可以使用try_convert或try_cast即使有任何特殊字符,它会在这种情况下
Select try_convert(int, replace([Total number], '.', ''))
不错的一个!谢谢Kannan :) – Probs
返回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
你需要这样123456789 –
这正是正确 – Probs
添加'WHERE替换([总数], '', '')NOT LIKE '%[^ 0-9]%' '以确保只有整数被转换。 – jarlh