2011-11-01 62 views
11

Cómo convertir Varchar a Int en el servidor sql 2008.Cómo convertir Varchar a Int en sql server 2008?

Tengo el siguiente código cuando intenté ejecutarlo no me permitió convertir Varchar a Int.

Select Cast([Column1] as INT) 

Column1 es de tipo Varchar (21) NOT NULL y yo quería convertirlo en Int. en realidad estoy tratando de insertar Column1 en otra tabla con Field como INT. ¿alguien puede ayudarme a convertir esto?

Respuesta

13

Los espacios no será un problema para cast, sin embargo caracteres como TAB, CR o LF aparecerán como espacios, no será recortada por LTRIM o RTRIM, y será un problema

Por ejemplo intente lo siguiente:

declare @v1 varchar(21) = '66', 
     @v2 varchar(21) = ' 66 ', 
     @v3 varchar(21) = '66' + char(13) + char(10), 
     @v4 varchar(21) = char(9) + '66' 

select cast(@v1 as int) -- ok 
select cast(@v2 as int) -- ok 
select cast(@v3 as int) -- error 
select cast(@v4 as int) -- error 

comprobará su entrada para estos caracteres y si los encuentra, utilice REPLACE para limpiar sus datos.


por su comentario, puede utilizar REPLACE como parte de su cast:

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int) 

Si esto es algo que va a suceder a menudo, sería mejor para limpiar los datos y modificar la forma en que se llena la tabla para eliminar CR y LF antes de que se ingrese.

+0

sí, tiene razón en '@ v3' es la misma condición con mi escenario ¿hay alguna manera o solución para que podamos convertirlo de varchar a int? –

+0

@VikrantMore, actualicé mi respuesta para incluir el uso de 'REPLACE' para eliminar el' CRLF'. –

2

Así es como lo harías, ¿está arrojando un error? ¿Estás seguro de que el valor que intentas convertir es convertible? Por razones obvias, no puede convertir abc123 en un int.

ACTUALIZACIÓN

Sobre la base de sus comentarios me gustaría eliminar los espacios que se encuentran en los valores que están tratando de convertir.

+0

@AbeMiessler sí mis valores en que las columnas son 66 o 2 no hay caracteres individuales, pero había una Espacios en blanco que siguen hacia la izquierda solamente. –

+1

¿Qué error está arrojando? ¿Estás seguro de que no hay espacios allí? –

+0

¿Hay algún valor nulo posible? – Eric

1

Esa es la forma correcta de convertirlo a INT siempre que no tenga ningún carácter alfabético o valores NULL.

Si tiene algún valor nulo, utilice

ISNULL(column1, 0) 
+0

sí que sé para ISNULL pero no tenemos ningún valor nulo, tenemos que conectarlo manualmente de Varchar a Int. –

+1

Él afirma que la columna tiene 'NOT NULL' aplicado en él. –

+0

Estoy usando Select convert (int, 'Au') pero sigo recibiendo el error de error de conversión. ¿Alguna pista? Gracias –

8

puede utilizar la función de conversión:

Select convert(int,[Column1]) 
0

Prueba el siguiente código. En la mayoría de los casos, es causado por el problema de la coma.

cast(replace([FIELD NAME],',','') as float) 
0

intento con los comandos a continuación, y se pedirá a todos los valores a INT

seleccione caso cuando IsNumeric (YourColumn +'.0E0') = 1 fundidas entonces (YourColumn como int) otro extremo NULL /* caja */ de YourTable

Cuestiones relacionadas