2012-10-19 14 views
10

Ho una colonna nvarchar in uno dei miei tavoli. Ora ho bisogno di convertire che i valori di colonna per INT tipo ..Come convertire la colonna Nvarchar in INT

Ho provato con

cast(A.my_NvarcharColumn as INT) 

e

convert (int, N'A.my_NvarcharColumn') 

Quando ho eseguito la mia domanda sto ottenendo gli errori come

Conversione non riuscita durante la conversione del valore nvarchar '23454542' in tipo di dati int.

ciao io metto il mio codice intero snippet

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

Fusioni funziona perfettamente bene per me, potresti pubblicare il frammento di codice completo, può essere l'errore è a causa di qualcos'altro – Seasoned

+0

marc_s hi, no non il suo lavoro, è dire Errore che converte il tipo di dati nvarchar a bigint – user1348424

+0

Fusioni sta lavorando bene – Habib

risposta

12

CONVERT prende il nome della colonna, non una stringa contenente il nome della colonna; la tua espressione corrente prova a convertire la stringa A.my_NvarcharColumn in un numero intero invece del contenuto della colonna.

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

dovrebbe invece essere

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

semplice SQLfiddle here.

+0

+1 per SQLfiddle; Non conoscevo ancora quel sito. – rekire

+0

ciao, ho provato a cambiare la funzione di conversione ancora affrontando lo stesso problema – user1348424

+0

@ user1348424 Quindi ho il sospetto che tu abbia un personaggio invisibile nella tua colonna nvarchar. Potresti provare 'SELECT CONVERT (VARBINARY, A.my_NvarcharColumn) FROM A;' e postare il risultato per uno dei tuoi valori che non convertirà? –

5

È sempre possibile utilizzare la funzione ISNUMERIC supporto per convertire solo ciò che è veramente numerico:

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

il cast() sembra corretta.

Il tuo CONVERT() non è corretto. Stai citando la colonna come una stringa. Si vuole qualcosa di simile

CONVERT(INT, A.my_NvarcharColumn) 

** preavviso senza le virgolette **

L'unico altro motivo per cui questo potrebbe fallire è se si dispone di un carattere non numerico nel valore del campo o se è fuori gamma.

si può provare qualcosa di simile a quanto segue per verificare che sia numerico e restituire un NULL se non è:

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

So che la sua troppo tardi, ma spero che funzionerà nuovi arrivati ​​ Try This Il suo lavoro .. .: D

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

AS 'my_NvarcharColumnmitter' 
from A 
0

Se si desidera convertire da char a int, perché non pensare a unicode numero?

SELECT UNICODE(';') -- 59 

In questo modo è possibile convertire qualsiasi carattere in int senza errori. Saluti.