Spaces nie będzie problemem dla cast
jednak postacie jak TAB
, CR
lub LF
pojawi się jako przestrzenie nie zostaną przycięte przez LTRIM
lub RTRIM
, i będzie problemem.
Na przykład spróbuj wykonać następujące czynności:
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
Sprawdź swój wkład do tych znaków i jeśli je znaleźć, należy REPLACE
oczyścić swoje dane.
Per Twojego komentarza można używać REPLACE
jako część cast
:
select cast(replace(replace(@v3, char(13), ''), char(10), '') as int)
Jeśli jest coś, co będzie często dzieje, byłoby lepiej, aby oczyścić dane i modyfikować sposób wypełnienia tabeli w celu usunięcia wartości CR
i LF
przed jej wprowadzeniem.
Tak, masz rację w "@ v3" jest taki sam warunek z moim scenariuszem jest tam jakikolwiek sposób lub rozwiązanie nad nim, abyśmy mogli przekonwertować go z varchar do int? –
@VikrantMore, zaktualizowałem moją odpowiedź, aby uwzględnić użycie 'REPLACE', aby usunąć' CRLF'. –