2012-10-19 18 views
10

Ich habe eine nvarchar Spalte in einer meiner Tabellen. Jetzt muss ich zu INT Art, dass Spaltenwerte umwandeln ..Wie konvertiert man Nvarchar Spalte zu INT

Ich habe versucht, mit

cast(A.my_NvarcharColumn as INT) 

und

convert (int, N'A.my_NvarcharColumn') 

Wenn ich meine Abfrage lief ich bin immer Fehler wie

Konvertierung fehlgeschlagen, wenn der Nvarchar-Wert '23454542' inkonvertiert wirdDatentyp int.

hallo ich meine gesamte Code-Snippet bin Entsendung

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

Cast funktioniert für mich völlig in Ordnung, können Sie den vollständigen Code-Schnipsel zu veröffentlichen, kann der Fehler wegen etwas anderes – Seasoned

+0

hallo marc_s, nee seine nicht funktioniert, es sagt Fehler beim Konvertieren Datentyp nvarchar – user1348424

+0

Cast bigint funktioniert gut – Habib

Antwort

12

CONVERT nimmt den Spaltennamen, keinen String die Spaltennamen enthält; Ihr aktueller Ausdruck versucht, die Zeichenfolge A.my_NvarcharColumn in eine Ganzzahl anstelle des Spalteninhalts zu konvertieren.

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

sollte stattdessen

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

Einfache SQLfiddle here sein.

+0

+1 für die SQLfiddle; Ich kannte diese Seite noch nicht. – rekire

+0

hi, ich habe versucht, die Konvertierungsfunktion immer noch mit dem gleichen Problem konfrontiert – user1348424

+0

@ user1348424 Dann vermute ich, dass Sie einige unsichtbare Zeichen in Ihrer Nvarchar-Spalte haben. Könnten Sie 'SELECT CONVERT (VARBINARY, A.my_NvarcharColumn) FROM A;' versuchen und das Ergebnis für einen Ihrer Werte veröffentlichen, die nicht konvertiert werden? –

5

Sie können immer die ISNUMERIC Helferfunktion nur zu konvertieren, was wirklich numerisch ist:

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

Ihre CAST() sieht richtig.

Ihre CONVERT() ist nicht korrekt. Sie geben die Spalte als Zeichenfolge an. Sie werden so etwas wie

CONVERT(INT, A.my_NvarcharColumn) 

** Hinweis ohne Anführungszeichen **

Die einzige andere Grund wollen, warum dies könnte scheitern, wenn Sie einen nicht-numerischen Zeichen in dem Feldwert haben, oder wenn es aus Angebot.

Sie können es numerisch so etwas wie die folgenden zu überprüfen versuchen, einen NULL zurückgeben, wenn es nicht ist:

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

Ich weiß es zu spät Aber ich hoffe, dass es Neuankömmlinge arbeiten diese ihre Arbeits Versuchen .. .: D

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

AS 'my_NvarcharColumnmitter' 
from A 
0

Wenn Sie von char konvertieren möchten int, warum nicht darüber nachdenken, Unicode Nummer?

SELECT UNICODE(';') -- 59 

Auf diese Weise können Sie jedes Zeichen ohne Fehler in int konvertieren. Prost.

Verwandte Themen