Как конвертировать Varchar в Int в SQL Server 2008? - PullRequest
14 голосов
/ 02 ноября 2011

Как конвертировать Varchar в Int в SQL Server 2008.

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

Select Cast([Column1] as INT) 

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

Ответы [ 7 ]

18 голосов
/ 02 ноября 2011

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

10 голосов
/ 15 мая 2014

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

Select convert(int,[Column1])
2 голосов
/ 02 ноября 2011

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

ОБНОВЛЕНИЕ

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

1 голос
/ 02 ноября 2011

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

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

ISNULL(column1, 0)
0 голосов
/ 04 июля 2018

Существует два типа метода преобразования в SQL.

CAST и CONVERT имеют похожую функциональность. CONVERT специфичен для SQL Server и обеспечивает большую гибкость при преобразовании значений даты и времени, дробных чисел и денежных показателей. CAST является более ANSI-стандартом двух функций.

Использование конвертации

Select convert(int,[Column1])

Использование броска

Select cast([Column1] as int)
0 голосов
/ 11 января 2018

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

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

0 голосов
/ 30 марта 2017

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

cast(replace([FIELD NAME],',','') as float)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...