Ошибка SQL: сбой преобразования при преобразовании значения varchar ',' в тип данных int - PullRequest
0 голосов
/ 29 мая 2018

Я ломаю голову над этим.Я продолжаю получать ошибку.Я следовал решениям по другим вопросам, но у меня ничего не работает.Я действительно надеюсь, что кто-то может исправить меня здесь.

Все, что мне нужно, это получить данные из представления

SELECT Table_view.Information
FROM Table_View

, но я продолжаю получать эту ошибку

Преобразование не удалось при преобразовании значения varchar ', 'к типу данных int

Я попробовал следующее:

SELECT Table_View.Information
FROM Table_View
WHERE Table_View.Information NOT LIKE '%,%'

SELECT Table_View.Information
CASE WHEN CAST(Table_View.Information AS INT) = 1 THEN 'space' 
ELSE CONVERT(VARCHAR, Table_View.Information) END
FROM Table_View

SELECT CAST (REPLACE(REPLACE(Table_View.Information, ' ,', ' '),'/', '') AS VARCHAR)
FROM Table_View

SELECT CONVERT(VARCHAR, REPLACE(REPLACE(Table_View.Information, ' ,', ' '),'/', ''))
FROM Table_View

SELECT Table_View.Information
CASE 
WHEN Table_View.Information NOT LIKE '%,%' THEN CAST(Table_View.Information AS VARCHAR)
END 

FROM Table_View 

Ничто из перечисленного не помогает мне решить проблему.Какие-либо предложения?Я пытался привести, преобразовать, случай, заменить ..

Ответы [ 2 ]

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

Очевидно, что вы должны использовать try_convert() или try_cast(), если 2012+.Вместо того, чтобы выдавать ошибку, в случае неудачного преобразования будет возвращено значение NULL.

Тем не менее, convert (money, ...) имеет тенденцию быть немного более прощающим

Пример

Declare @Table table (SomeCol varchar(50))  
Insert Into @Table values 
 ('$25.25')
,('-  252,525.25')

Select AsMoney = convert(money,SomeCol)  -- int would fail
 From  @Table

Возвращает

AsMoney
25.25
-252525.25
0 голосов
/ 29 мая 2018

WHERE Table_View.Information NOT LIKE '%,%'

Приведенный выше код подразумевает, что информация - это символьный столбец, поскольку невозможно преобразовать запятую в число.

CASE WHEN CAST(Table_View.Information AS INT) = 1 THEN 'space' 

Здесь есть ошибка, так как CAST не предоставляет возвращаемое значение, такое, что его можно сравнить с числом 1, а если значение содержит запятую, то любая попыткапреобразование в int приведет к ошибке преобразования типа.

Попробуйте использовать ISNUMERIC() или TRY_CAST() вместо того места, где у вас есть CAST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...