Ошибка SQL при преобразовании типа данных nvarchar во float - PullRequest
0 голосов
/ 07 мая 2018

Я получаю ошибку

Ошибка преобразования типа данных nvarchar в число с плавающей точкой

в этой части моей хранимой процедуры:

 SELECT 
     CAST(RTRIM(Value) AS FLOAT)     
 FROM 
     table_1
 WHERE 
     ISNUMERIC(RTRIM(Value)) = 1 
     AND RTRIM(Value) NOT LIKE '%[^0-9.]%'

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

Если кто-то может предложить способ, которым я хотел бы знать, какое значение могло бы пройти через две проверки, которые мы имеем.

Ответы [ 2 ]

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

Используйте TRY_CONVERT() вместо

SELECT CONVERT(DECIMAL(10, 0), RTRIM(Value)) as Col
FROM table_1
WHERE TRY_CONVERT((DECIMAL(10, 0), Value) IS NOT NULL;
--WHERE ISNUMERIC(RTRIM(Value)) = 1 AND RTRIM(Value) NOT LIKE '%[^0-9.]%'
0 голосов
/ 07 мая 2018

Если бы у вас был SQL Server 2012 или новее, вы могли бы использовать TRY_CONVERT вместо ISNUMERIC

SELECT TRY_CONVERT(FLOAT, RTRIM(Value))
FROM table_1
WHERE RTRIM(Value) NOT LIKE '%[^0-9.]%'

В вашем случае вы должны добавить дополнительные условия к предложению WHERE (я смогпридумать два):

SELECT 
     CAST(RTRIM(Value) AS FLOAT)     
 FROM 
     table_1
 WHERE 
     ISNUMERIC(RTRIM(Value)) = 1 
     AND RTRIM(Value) NOT LIKE '%[^0-9.]%'
     AND RTRIM(Value) != '.'
     AND RTRIM(Value) NOT LIKE '%.%.%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...