2012-10-19 92 views
10

Tôi có một cột nvarchar ở một trong các bảng của tôi. Bây giờ tôi cần phải chuyển đổi các giá trị cột để INT loại ..Cách chuyển đổi cột Nvarchar thành INT

Tôi đã cố gắng sử dụng

cast(A.my_NvarcharColumn as INT) 

convert (int, N'A.my_NvarcharColumn') 

Khi tôi chạy truy vấn của tôi tôi nhận được lỗi như

Chuyển đổi không thành công khi chuyển đổi giá trị nvarchar '23454542' thành kiểu dữ liệu int.

hi tôi đang đăng toàn bộ đoạn mã của tôi

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

Hoạt động diễn xuất hoàn toàn phù hợp với tôi, bạn có thể đăng đoạn mã hoàn chỉnh, có thể là lỗi do một cái gì đó khác – Seasoned

+0

hi marc_s, nope không hoạt động, nó nói Error conversion datatype nvarchar to bigint – user1348424

+0

Cast đang hoạt động tốt – Habib

Trả lời

12

CONVERT mất tên cột, không phải là một chuỗi chứa tên cột; biểu thức hiện tại của bạn cố gắng chuyển đổi chuỗi A.my_NvarcharColumn thành số nguyên thay vì nội dung cột.

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

thay vì nên

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

Simple SQLfiddle here.

+0

+1 cho SQLfiddle; Tôi chưa biết trang web đó. – rekire

+0

hi, tôi đã cố gắng thay đổi chức năng chuyển đổi vẫn còn phải đối mặt với cùng một vấn đề – user1348424

+0

@ user1348424 Sau đó, tôi nghi ngờ bạn có một số ký tự vô hình trong cột nvarchar của bạn. Bạn có thể thử 'SELECT CONVERT (VARBINARY, A.my_NvarcharColumn) FROM A;' và đăng kết quả cho một trong các giá trị của bạn sẽ không chuyển đổi? –

5

Bạn luôn có thể sử dụng chức năng ISNUMERIC helper để chuyển đổi chỉ những gì thực sự số:

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

CAST() của bạn có vẻ đúng.

CONVERT() của bạn không chính xác. Bạn đang trích dẫn cột dưới dạng chuỗi. Bạn sẽ muốn một cái gì đó giống như

CONVERT(INT, A.my_NvarcharColumn) 

** thông báo mà không có dấu ngoặc kép **

duy nhất lý do khác tại sao điều này có thể thất bại là nếu bạn có một nhân vật không phải số trong giá trị trường hoặc nếu nó ra khỏi phạm vi.

Bạn có thể thử một cái gì đó như sau để xác minh đó là số và trả về một NULL nếu nó không phải là:

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

Tôi biết nó Quá trễ Nhưng tôi hy vọng nó sẽ làm việc những người mới Hãy thử này làm việc của nó .. .: D

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

AS 'my_NvarcharColumnmitter' 
from A 
0

Nếu bạn muốn chuyển đổi từ char sang int, tại sao không suy nghĩ về unicode số?

SELECT UNICODE(';') -- 59 

Bằng cách này bạn có thể chuyển đổi bất kỳ từ nào sang int mà không gặp bất kỳ lỗi nào. Chúc mừng.

Các vấn đề liên quan