Преобразование nvarchar в int, числовое возвращение 0 на число - PullRequest
0 голосов
/ 25 мая 2018

У меня есть временная таблица с типом данных NVARCHAR, которую необходимо перенести в таблицу с типом данных INTEGER.

У меня есть две NVARCHAR таблицы, которые должны быть INTEGER, одна из которыхработает, а другой выдает ошибку,

Преобразование не удалось при преобразовании значения nvarchar '9824
' в тип данных 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

Ответы [ 4 ]

0 голосов
/ 25 мая 2018

Я бы проверил длину.Это даст вам представление о том, сколько специальных символов вы ищете.

SELECT LEN(Revenue)
FROM OLTP.ExtractedData

Затем используйте SUBSTRING и ASCII, чтобы узнать, что это за символ.

SELECT 
  ASCII(SUBSTRING(Revenue, 5, 1))
FROM OLTP.ExtractedData
0 голосов
/ 25 мая 2018
  SELECT  PARSE(column_name AS int )  from table

Tested

0 голосов
/ 25 мая 2018

Возможно, у вас есть разрыв строки, 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))
0 голосов
/ 25 мая 2018

Вместо cast() используйте `try_cast ()

SELECT TRY_CAST(table_name AS integer)
FROM OLTP.table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...