Преобразование nvarchar в bigint на сервере Sql 2008

Я хочу вставить все строки таблицы в другую таблицу, а также хочу преобразовать поле nvarchar в bigint, но когда я использую convert(bigint, col1), SQL Server показывает ошибку:

Ошибка преобразования типа данных nvarchar в bigint

Как я могу решить эту проблему?


person Hossein Moradinia    schedule 29.04.2011    source источник
comment
Как я могу решить эту проблему? - просто. удалить данные, которые не могут быть преобразованы в biginteger   -  person Mitch Wheat    schedule 29.04.2011
comment
Как я могу автоматически удалить нечисловые данные...?   -  person Hossein Moradinia    schedule 29.04.2011
comment
не имея волшебной палочки, написав TSQL, чтобы удалить его!   -  person Mitch Wheat    schedule 29.04.2011


Ответы (2)


Вы можете попробовать использовать ISNUMERIC для определения тех строк, которые действительно являются числовыми:

UPDATE dbo.YourTable
SET BigIntColumn = CAST(NVarcharColumn AS BIGINT)
WHERE ISNUMERIC(NVarcharColumn) = 1

Что бы преобразовать те строки, которые можно преобразовать - с остальными нужно разбираться вручную.

person marc_s    schedule 29.04.2011
comment
спасибо... это мой ответ... так что спасибо - person Hossein Moradinia; 29.04.2011
comment
Это не удастся для десятичных знаков, хранящихся в виде строк: SELECT CAST('.1' AS BIGINT) WHERE ISNUMERIC('.1') = 1 - person BD.; 05.01.2016
comment
просто чтобы добавить к комментарию BD, char (36) и символы 43-46, 48-57, 92, 128, 160, 162-165 оцениваются как 1, являющиеся числовыми. Настоящий кикер находится в операторе where или join, где вы сначала логически отфильтровываете все нечисловые значения, в конце выполняете оператор convert, и эта ошибка все еще возникает (игнорирует короткое замыкание и оценивает всю строку). - person Zachary Scott; 18.08.2016

Вы должны преобразовать bigint в nvarchar, а не наоборот (Other_Column_name как nvarchar), а не приводить (Column_Name как bigint)

person Gamal Weshahy    schedule 20.05.2018