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.
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? –
@VikrantMore, actualicé mi respuesta para incluir el uso de 'REPLACE' para eliminar el' CRLF'. –