2017-05-23 77 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 
相關問題