У меня есть временная таблица с типом данных NVARCHAR, которую мне нужно перенести в таблицу с типом данных INTEGER.
У меня есть две таблицы NVARCHAR, которые должны быть INTEGER, одна работает, а другая выдает ошибку,
Conversion failed when converting the nvarchar value '9824
' to data type int.
Я попытался удалить это лишнее пространство с помощью LTRIM и RTRIM, но ISNUMERIC() все еще дает 0, и ошибка остается той же.
Это код, приводящий к ошибке,
SELECT CAST(table_name AS integer)
FROM OLTP.table
Что я пробовал:
SELECT ISNUMERIC(REPLACE(Revenue, ' ', '')), Revenue, ISNUMERIC(REPLACE(LTRIM(RTRIM(Revenue)), ' ', ' '))
FROM OLTP.ExtractedData
Пример данных
(No column name) Revenue (No column name)
0 9824 0
0 5661 0
0 3250 0
0 2959 0
0 2511 0
0 2072 0
0 2056 0
0 1705 0
0 1704 0


Вместо cast() используйте `try_cast ()
SELECT TRY_CAST(table_name AS integer)
FROM OLTP.table
У вас, вероятно, есть разрыв строки, TRIM / RTRIM не обрезает их.
declare @value nvarchar(10) = '1234
'
select ISNUMERIC(Replace(CHAR(9), '', @value))
select ISNUMERIC(Replace(CHAR(10), '', @value))
select ISNUMERIC(Replace(CHAR(13), '', @value))
select ISNUMERIC(Replace(CHAR(32), '', @value))
Я бы проверил длину. Это даст вам представление о том, сколько специальных символов вы ищете.
SELECT LEN(Revenue)
FROM OLTP.ExtractedData
Затем используйте SUBSTRING и ASCII, чтобы узнать, что это за персонаж.
SELECT
ASCII(SUBSTRING(Revenue, 5, 1))
FROM OLTP.ExtractedData
Это производит
NULL, что происходит, если данные не являются целыми числами, но это так.