Convierte una cadena a int usando la consulta sql

169

¿Cómo convertir una cadena a entero usando la consulta SQL en SQL Server 2005?

Rahul Vyas
fuente

Respuestas:

298

Puedes usar CAST o CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table
CMS
fuente
44
¿Cómo atrapo / evito la excepción cuando uno de los campos no es numérico? Hubiera esperado que se convirtiera a 0.
Chloe
40
Lo encontré:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe
9
Solo una palabra: IsNumeric()puede producir algunos resultados perversos. Devolverá VERDADERO para la cadena "-.", Que seguirá causando un error cuando intente convertirlo en un número.
Curt
3
IsNumeric será verdadero para cadenas con "-" solo si la cadena es numérica, por ejemplo "-5" o "-20", será falso para cadenas como "5-", "-2-1". Entonces, si isNumeric () es verdadero, entonces la conversión no debería arrojar ninguna excepción
Pratyush Dhanuka
11

También tenga en cuenta que al convertir una cadena numérica, es decir, '56.72'a INT, puede encontrar un error de SQL.

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

Para evitar esto, solo haga dos conversiones de la siguiente manera:

STRING -> NUMÉRICO -> INT

o

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

Al copiar datos de TableA a TableB, la conversión es implícita, por lo que no necesita la segunda conversión (si está satisfecho redondeando al INT más cercano):

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA
Steven de Salas
fuente
8

A partir de SQL Server 2012, puede usar TRY_PARSE o TRY_CONVERT .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)
Örjan Jämte
fuente
Definitivamente no es la respuesta correcta para la pregunta original, ya que estaba en relación con SQL Server 2005, pero dado que es 2019 y menos personas están atadas a una versión tan antigua de SQL Server, esta respuesta es definitivamente útil.
Shaune
-2

Prueba este, me funcionó en Athena:

cast(MyVarcharCol as integer)
ashutosh singh
fuente