Преобразовать nvarchar в bigint в Sql server 2008

#sql #sql-server-2008 #nvarchar #bigint

#sql #sql-server-2008 #nvarchar #bigint

Вопрос:

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

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

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

Комментарии:

1. «Как я могу решить эту проблему?» — просто. удалите данные, которые не могут быть преобразованы в biginteger

2. Как я могу автоматически удалять нечисловые данные …?

3. не имея волшебной палочки, написав TSQL для ее удаления!

Ответ №1:

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

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

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

Комментарии:

1. Это приведет к сбою для десятичных знаков, хранящихся в виде строк: ВЫБЕРИТЕ ПРИВЕДЕНИЕ(‘.1’ КАК BIGINT), ГДЕ ISNUMERIC(‘.1’) = 1

2. просто чтобы добавить к комментарию BD символ (36) и символы 43-46, 48-57, 92, 128, 160, 162-165 все значения равны 1 и являются числовыми. Настоящая проблема заключается в инструкции where или join, где сначала вы логически отфильтровываете все нечисловые значения, в конце выполняете инструкцию convert, и эта ошибка все еще возникает (игнорирует короткое замыкание и вычисляет всю строку).

Ответ №2:

Вы должны преобразовать bigint в nvarchar, а не наоборот приводить (имя__колонок_в качестве nvarchar), а не приводить (имя_колонок_в качестве bigint)

Ответ №3:

вы можете попробовать это:

 CAST(CAST(col1 as NUMERIC) as BIGINT)
  

Ответ №4:

Здесь я преобразую значение navrchar столбца в bigInt, а затем выполняю добавление этих двух столбцов, которые находят удар :

 SELECT (CAST(col1 AS BIGINT)   CAST(col2 AS BIGINT)) AS TotalValue from tableName