2011-11-01 91 views
11

如何在SQL Server 2008中將Varchar轉換爲Int。如何將SQL Server 2008中的Varchar轉換爲Int?

我有以下代碼,當我試圖運行它時,不會允許我將Varchar轉換爲Int。

Select Cast([Column1] as INT) 

Column1是Varchar(21)NOT NULL類型,我想將它轉換爲Int。 實際上,我正試圖將Column1插入到另一個表中,將Field作爲INT。 有人可以幫我轉換嗎?

回答

13

空間將不會成爲一個問題cast,但字符,如TABCRLF將顯示爲空格,不會被LTRIMRTRIM進行修整,並會成爲一個問題。

例如嘗試以下操作:

declare @v1 varchar(21) = '66', 
     @v2 varchar(21) = ' 66 ', 
     @v3 varchar(21) = '66' + char(13) + char(10), 
     @v4 varchar(21) = char(9) + '66' 

select cast(@v1 as int) -- ok 
select cast(@v2 as int) -- ok 
select cast(@v3 as int) -- error 
select cast(@v4 as int) -- error 

檢查您輸入這些字符,如果你找到他們,用REPLACE清理您的數據。


根據您的意見,您可以使用REPLACE爲您cast的一部分:

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int) 

如果這一點是要經常發生的事情,這將是更好地清理數據和修改填入表格以刪除輸入前的CRLF

+0

是的,你在'@ v3'是正確的與我的情況是相同的條件是否有任何方式或解決方案,以便我們可以將其從varchar轉換爲int? –

+0

@VikrantMore,更新了我的答案,包括使用'REPLACE'來刪除'CRLF'。 –

2

這就是你會怎麼做的,它是拋出一個錯誤?你確定你試圖轉換的價值是可兌換的嗎?由於顯而易見的原因,您不能將abc123轉換爲int。

UPDATE

根據您的意見我會刪除那些你正試圖轉換的值的任何空間。

+0

@AbeMiessler/ 是我的在列中的值是66或2沒有單一的字符,但出現了一個只留下尾隨空白空間。 –

+1

它拋出了什麼錯誤?你確定那裏沒有空格嗎? –

+0

有沒有可能的NULL值? – Eric

1

只要您沒有任何字母字符或NULL值,這是將其轉換爲INT的正確方法。

如果您有任何NULL值,使用

ISNULL(column1, 0) 
+0

是的,我知道ISNULL,但我們沒有任何空值,我們必須手動將它從Varchar轉換爲Int。 –

+1

他聲稱該列上強制執行了NOT NULL。 –

+0

我正在使用Select convert(int,'Au')但仍然收到轉換失敗錯誤。 任何線索? 謝謝 –

8

您可以使用轉換功能:

Select convert(int,[Column1]) 
0

試試下面的代碼。在大多數情況下,它是由逗號問題引起的。

cast(replace([FIELD NAME],',','') as float) 
0

嘗試用下面的命令,它會要求所有的值設置爲INT

選擇的情況下,當ISNUMERIC(YourColumn +」。0E0' )= 1 然後澆鑄(YourColumn作爲INT) 別的NULL 端/ * *的情況下從YourTable

相關問題