2012-10-19 14 views
10

Mam kolumnę nvarchar w jednej z moich tabel. Teraz muszę przekonwertować wartości kolumny do INT typu ..Jak przekonwertować kolumnę Nvarchar do INT

Próbowałem, używając

cast(A.my_NvarcharColumn as INT) 

i

convert (int, N'A.my_NvarcharColumn') 

Kiedy wpadłem moje zapytanie Ja otrzymuję błędy jak

Konwersja nie powiodła się podczas konwersji wartości nvarchar '23454542' na typ danych wew.

hi jestem delegowania mój cały fragment kodu

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

Obsada działa perfekcyjnie dla mnie, można dodawać kompletny fragment kodu może być błąd jest ze względu na coś innego – Seasoned

+0

hi marc_s, nope jej nie działa, to mówiąc Błąd konwersji typu danych nvarchar do bigint – user1348424

+0

Odlewanie działa poprawnie – Habib

Odpowiedz

12

CONVERT bierze nazwę kolumny, a nie ciąg znaków zawierający nazwę kolumny; twoje obecne wyrażenie próbuje przekonwertować ciąg A.my_NvarcharColumn na liczbę całkowitą zamiast zawartości kolumny.

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

powinien zamiast być

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

Proste SQLfiddle here.

+0

+1 dla SQLfiddle; Jeszcze nie znałem tej strony. – rekire

+0

cześć, próbowałem zmienić funkcję konwersji nadal stoi ten sam problem – user1348424

+0

@ user1348424 Wtedy podejrzewam, że masz pewną niewidzialną postać w swojej kolumnie nvarchar. Czy mógłbyś wypróbować 'SELECT CONVERT (VARBINARY, A.my_NvarcharColumn) OD A;' i opublikować wynik dla jednej z twoich wartości, które się nie skonwertuje? –

5

Zawsze można użyć funkcji ISNUMERIC pomocnika do konwersji tylko to, co naprawdę numeryczna:

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

Twój CAST() wygląda poprawnie.

Twoja funkcja CONVERT() jest nieprawidłowa. Cytujesz kolumnę jako ciąg znaków. Będziemy chcieli coś takiego

CONVERT(INT, A.my_NvarcharColumn) 

** zawiadomienie bez cudzysłowów **

Jedyny inny powód, to może nie jest, jeśli mają charakter non-liczbową wartość pola lub jeśli jest to z zasięg.

Można spróbować coś jak poniżej, aby sprawdzić to numeryczny i zwraca NULL jeśli nie ma:

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

znam jej zbyt późno, ale mam nadzieję, że to będzie działać nowi Try To jego pracy .. .: D

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

AS 'my_NvarcharColumnmitter' 
from A 
0

Jeśli chcesz przekonwertować z char do int, dlaczego nie pomyśleć o unicode numer?

SELECT UNICODE(';') -- 59 

W ten sposób można przekonwertować dowolny znak na int bez żadnego błędu. Twoje zdrowie.

Powiązane problemy