2012-10-19 149 views
10

我的表格中有一個nvarchar列。現在我需要的列值轉換爲INT類型..如何將Nvarchar列轉換爲INT

我一直在使用

cast(A.my_NvarcharColumn as INT) 

convert (int, N'A.my_NvarcharColumn') 

當我跑我的查詢我收到這樣的錯誤

嘗試

將nvarchar值「23454542」轉換爲時轉換失敗數據類型int。

你好我張貼我的整個代碼段

SELECT A.objID, name, des, right(Replace(Ltrim(Replace(substring(my_nvarcharcolumn,1,9), '0', ' ')), ' ', '0'),10) AS new_nvarcharcolumn 
INTO #tmp1 
FROM [database].[dbo].[tblname] AS A 
INNER JOIN (SELECT * FROM [database].[dbo].tblname1 WHERE sourceID = 32) AS AI ON source = A.objID 
INNER JOIN [database].[dbo].tblname2 AS I ON I.ObjectID = A.Source 

SELECT MAX(m_dAddDate) AS date_Asof, dnum INTO #tmp2 FROM 
(SELECT * FROM [database].[dbo].tblname WHERE senior <> '' AND class = 'SSS') AS A 
GROUP BY dnum 

SELECT DISTINCT A.* INTO #tmp3 FROM #tmp1 AS A 
INNER JOIN #tmp2 AS SD ON SD.dnum =cast(A.new_nvarcharcolumn as INT) 
INNER JOIN database.[dbo].tbl4 AS M ON M.dnum = cast(A.new_nvarcharcolumn as INT) AND SD.date_Asof = M.adddate 
+0

演員工作對我來說完全沒有問題,你能不能發佈完整的代碼片段,可能是錯誤的,因爲別的 – Seasoned

+0

喜marc_s,都能跟得上它不工作,它說錯誤轉換數據類型爲nvarchar爲bigint – user1348424

+0

演員工作正常 – Habib

回答

12

CONVERT需要的列名,不包含列名稱的字符串;您當前的表達式嘗試將字符串A.my_NvarcharColumn轉換爲整數而不是列內容。

SELECT convert (int, N'A.my_NvarcharColumn') FROM A; 

應改爲

SELECT convert (int, A.my_NvarcharColumn) FROM A; 

簡單SQLfiddle here

+0

SQLfiddle的+1;我還不知道那個網站。 – rekire

+0

嗨,我試着改變仍然面臨相同問題的轉換函數 – user1348424

+0

@ user1348424然後我懷疑你的nvarchar列中有一些不可見的字符。你可以嘗試'選擇CONVERT(VARBINARY,A.my_NvarcharColumn)從A;'併發布你的值不會轉換的結果? –

5

您可以隨時使用ISNUMERIC輔助函數來只什麼是真正的數字轉換:

SELECT 
    CAST(A.my_NvarcharColumn AS BIGINT) 
FROM 
    A 
WHERE 
    ISNUMERIC(A.my_NvarcharColumn) = 1 
0

你CAST()看起來是正確的。

您的CONVERT()不正確。您將該列引用爲字符串。您將要像

CONVERT(INT, A.my_NvarcharColumn) 

**通知不帶引號**

唯一的其他原因,這可能是失敗的,如果你有在字段值的非數字字符或者如果它出來的範圍。

你可以嘗試像下面的內容,以驗證它的數字和返回NULL,如果它不是:

SELECT 
CASE 
    WHEN ISNUMERIC(A.my_NvarcharColumn) = 1 THEN CONVERT(INT, A.my_NvarcharColumn) 
    ELSE NULL 
END AS my_NvarcharColumn 
1

我知道爲時已晚,但我希望它會工作的新來者 試一試它的工作.. :d

select 
    case 
     when isnumeric(my_NvarcharColumn) = 1 then 
       cast(my_NvarcharColumn AS int) 
     else 
       NULL 
end 

AS 'my_NvarcharColumnmitter' 
from A 
0

如果你想從字符轉換成int,爲什麼不想想的Unicode多少?

SELECT UNICODE(';') -- 59 

這種方式可以將任何字符轉換爲int而不會出現任何錯誤。乾杯。