Convierte una cadena a int usando la consulta sql


Respuestas:


298

Puedes usar CAST o CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

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

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)

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.