Как преобразовать Varchar в Int в sql server 2008?

Как преобразовать Varchar в Int в SQL Server 2008.

У меня есть следующий код, когда я пытался запустить его, не позволял мне преобразовывать Varchar в Int.

Select Cast([Column1] as INT) 

Столбец 1 имеет тип Varchar (21) NOT NULL, и я хотел преобразовать его в Int. на самом деле я пытаюсь вставить столбец 1 в другую таблицу с полем как INT. может кто-то, пожалуйста, помогите мне преобразовать это?

Ответ 1

Пробелы не будут проблемой для 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 до того, как он будет введен.

Ответ 2

вы можете использовать функцию преобразования:

Select convert(int,[Column1])

Ответ 3

Вот как вы это сделаете, это ошибка? Вы уверены, что ценность, которую вы пытаетесь преобразовать, является конвертируемой? По понятным причинам вы не можете преобразовать abc123 в int.

ОБНОВЛЕНИЕ

Основываясь на ваших комментариях, я удаляю любые пробелы, которые находятся в значениях, которые вы пытаетесь преобразовать.

Ответ 4

Это правильный способ конвертировать его в INT, если у вас нет альфа-символов или значений NULL.

Если у вас есть значения NULL, используйте

ISNULL(column1, 0)

Ответ 5

Попробуйте использовать следующий код. В большинстве случаев это вызвано проблемой запятой.

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

Ответ 6

Попробуйте выполнить команду ниже и запросите все значения в INT

выберите случай, когда isnumeric (YourColumn + '.0e0') = 1           затем cast (YourColumn as int)           else NULL      конец /* кейс */   из вашей таблицы