Как определить значение поля, которое не может быть преобразовано в (десятичное, с плавающей точкой, int) в SQL Server - PullRequest
15 голосов
/ 23 декабря 2010

У меня есть база данных SQL Server.

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

 ID      VALUE
  1      NEGATIF
  2      11.4
  3      0.2
  4      A RH(+)
  5      -----
  6      >>>>>
  7      5.6<
  8      -13.9

Я хочу преобразовать поле VALUE в десятичное, конечно же, конвертируемые поля.*

  1. Какой SQL-оператор может это сделать?

  2. Как понять, какое значение вызывает ошибку при преобразовании?

PS: я думаю, что это может решить WHERE VALUE LIKE '[a-z]', но как я могу добавить больше фильтров, например [- + ()]?

1 Ответ

62 голосов
/ 23 декабря 2010

Обычный ISNUMERIC мусор

  • Пустая строка, +, - и . все действительны
  • Так же +. и т. Д.
  • 1e-3 действителен для числа с плавающей запятой, но не десятичного числа (если вы не CAST для всплытия, а затем десятичного числа)

Для особенно загадочного, но отказоустойчивого решения добавьте e0 или .0e0 , затем используйте ISNUMERIC

SELECT
   ISNUMERIC(MyCOl + 'e0')   --decimal check,
   ISNUMERIC(MyCOl + '.0e0')  --integer check

So

SELECT
    ID, VALUE,
    CAST(
          CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
          AS decimal(38, 10)
        ) AS ConvertedVALUE
FROM
    Mytable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...