как привести nvarchar к десятичной? - PullRequest
1 голос
/ 30 марта 2011

Я знаю, как преобразовать nvarchar в десятичный (18,4) метод Cast. в моих таблицах насчитывается 80000 строк. Мой запрос выполняется без ошибок ...


SELECT  top 80000 id, Cast(MH as decimal(18,4)) as MH 
FROM TaskRelations WHERE MH is not null

НО;

но ниже выбранный запрос не РАБОТАЕТ! если напишите ниже:


SELECT   id, Cast(MH as decimal(18,4)) as MH 
FROM TaskRelations WHERE MH is not null

ОШИБКА: ошибка преобразования типа данных nvarchar в числовой.

Ответы [ 4 ]

7 голосов
/ 30 марта 2011

В поле MH после строки 80 000 содержатся нечисловые данные.

Вы можете использовать функцию ISNUMERIC , но она, как известно, содержит ошибки и даст вам множество ложных срабатываний в зависимости от ваших данных.

1 голос
/ 30 марта 2011

Проблема обычно заключается в том, что некоторые из nvarchars в столбцах MH не могут быть преобразованы в десятичную.

Вы можете попытаться проверить данные визуально, но, поскольку у вас более 80 тыс. Записей, это может оказаться невозможным. Попробуйте проверить данные другим способом - вы можете использовать isNumeric или group by в первых (или последних) трех символах столбца, чтобы найти ошибочные данные.

0 голосов
/ 31 марта 2011

попробуйте это:

SELECT   max(MH) as max_mh, min(mh) as min_mh
FROM TaskRelations 
WHERE MH is not null

нечисловые значения должны быть ниже или выше числовых.

0 голосов
/ 30 марта 2011

В основном ошибка, которую вы получаете, связана с тем, что некоторые записи после 80000 лучших записей не могут быть преобразованы в десятичную. Проверьте свои данные по всем строкам> 80000

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