Как преобразовать 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 конец /* кейс */ из вашей таблицы