Пробелы не будут проблемой для cast
, однако такие символы, как TAB
, CR
или LF
будут отображаться как пробелы, не будут обрезаны на LTRIM
или RTRIM
и будутПроблема.
Например, попробуйте следующее:
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
Проверьте ввод этих символов и, если найдете, используйте REPLACE
для очистки ваших данных.
Согласно вашему комментарию, вы можете использовать REPLACE
как часть вашего cast
:
select cast(replace(replace(@v3, char(13), ''), char(10), '') as int)
Если это будет происходить часто, это будетлучше очистить данные и изменить способ заполнения таблицы, чтобы удалить CR
и LF
до ее ввода.