#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