SQL не удалось преобразовать Varchar в числовое значение - ошибка преобразования не удалась - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно преобразовать серийные номера в таблицу базы данных, чтобы они отображались как числа или целые числа.Я попытался преобразовать их, но мне не нравятся некоторые значения, подобные следующим: 1.02253e + 007.Получение сообщения об ошибке:

Сообщение 245, Уровень 16, Состояние 1, Строка 2

Преобразование не удалось при преобразовании значения varchar '1.02253e + 007' в тип данных int.

Есть что-то, что я пропускаю?Любая помощь очень ценится

SELECT  [ID]
  ,[SalesOrder]
  ,[JobNumber]
  ,[StockCode]
  ,SerialNumber
  ,CONVERT(NUMERIC(16, 0), CAST(CASE 
                                  WHEN ISNUMERIC(SerialNumber) = 1 THEN 
                                  SerialNumber 
                                  ELSE 0 
                                END AS FLOAT))

Ошибка получения: сообщение 245, Уровень 16, Состояние 1, Строка 2 Преобразование не удалось при преобразовании значения varchar '1.02253e + 007' в тип данных int.

1 Ответ

0 голосов
/ 11 февраля 2019

case возвращает целое число, что является вашей проблемой.Вы делаете много промежуточных преобразований, которые не нужны.Просто сделайте:

(CASE WHEN ISNUMERIC(SerialNumber) = 1
      THEN CONVERT(NUMERIC(16, 0), SerialNumber)
      ELSE 0 
 END)

Или еще лучше:

COALESCE(TRY_CONVERT(NUMERIC(16, 0), SerialNumber), 0)

Если вам нужно поддерживать экспоненциальные значения (например, 1.02253e + 007), тогда вам нужно промежуточное преобразование для плавания:

TRY_CONVERT(NUMERIC(16, 0), 
            COALESCE(TRY_CONVERT(float, SerialNumber), 0)
           )
...