Converti una stringa in int usando la query sql


169

Come convertire una stringa in numero intero utilizzando la query SQL su SQL Server 2005?

Risposte:


297

Puoi usare CAST o CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Come posso rilevare / impedire l'eccezione quando uno dei campi è non numerico? Mi sarei aspettato che si convertisse in 0.
Chloe,

40
Trovato:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe,

9
Solo una parola: IsNumeric()può produrre alcuni risultati perversi. Restituirà VERO per la stringa "-.", Che provocherà comunque un errore quando si tenta di eseguirne il cast su un numero.
Curt

3
IsNumeric sarà vero per le stringhe con "-" solo se la stringa è numerica, ad esempio "-5" o "-20", sarà falsa per le stringhe come "5-", "-2-1". Quindi, se isNumeric () è vero, la conversione non dovrebbe generare alcuna eccezione
Pratyush Dhanuka,

11

Inoltre, tieni presente che durante la conversione da stringa numerica, '56.72'ad esempio a INT, potresti riscontrare un errore SQL.

Conversion failed when converting the varchar value '56.72' to data type int.

Per aggirare questo basta fare due convertiti come segue:

STRING -> NUMERIC -> INT

o

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)

Quando si copiano i dati da TableA a TableB, la conversione è implicita, quindi non è necessaria la seconda conversione (se si è felici di arrotondare per difetto all'INT più vicino):

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA

8

A partire da SQL Server 2012, è possibile utilizzare TRY_PARSE o TRY_CONVERT .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

Sicuramente non è la risposta giusta per la domanda originale poiché era in relazione a SQL Server 2005, ma dal momento che è il 2019 e un minor numero di persone sono legate a una versione così vecchia di SQL Server, questa risposta è sicuramente utile.
Shaune

-2

Prova questo, ha funzionato per me in Athena:

cast(MyVarcharCol as integer)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.