Конвертировать VARCHAR для плавания, если ISNUMERIC - PullRequest
14 голосов
/ 23 мая 2011

У меня есть столбец, который содержит символы и цифры

12
13
14
19K/YR
22

Таким образом, тип столбца varchar.Но затем я также делаю некоторые вычисления с этим столбцом, поэтому я пытаюсь преобразовать данные в плавающее, если они числовые.

Это дает мне ошибку, хотя:

SELECT CASE ISNUMERIC(QTY) 
         WHEN 1 THEN CAST(QTY AS float) 
         ELSE QTY 
       END AS test

Ответы [ 4 ]

31 голосов
/ 23 мая 2011

Вы не можете бросить, чтобы плавать и держать строку в том же столбце. Вы можете сделать это, чтобы получить значение NULL, когда isnumeric возвращает 0.

SELECT CASE ISNUMERIC(QTY) WHEN 1 THEN CAST(QTY AS float) ELSE null END
11 голосов
/ 23 мая 2011

.. расширяя ответы Микаэлса

SELECT
  CASE WHEN ISNUMERIC(QTY + 'e0') = 1 THEN CAST(QTY AS float) ELSE null END AS MyFloat
  CASE WHEN ISNUMERIC(QTY + 'e0') = 0 THEN QTY ELSE null END AS MyVarchar
FROM
  ...
  • Для двух типов данных требуются два столбца
  • Добавление e0 исправляет некоторые проблемы ISNUMERIC (такие как + - . и допускается пустая строка)
2 голосов
/ 24 октября 2013

Я нашел эту очень досадную ошибку при преобразовании значений EmployeeID с ISNUMERIC:

SELECT DISTINCT [EmployeeID],
ISNUMERIC(ISNULL([EmployeeID], '')) AS [IsNumericResult],

CASE WHEN COALESCE(NULLIF(tmpImport.[EmployeeID], ''), 'Z')
    LIKE '%[^0-9]%' THEN 'NonNumeric' ELSE 'Numeric'
END AS [IsDigitsResult]
FROM [MyTable]

Это возвращает:

EmployeeID IsNumericResult MyCustomResult
---------- --------------- --------------
           0               NonNumeric
00000000c  0               NonNumeric
00D026858  1               NonNumeric

(3 row(s) affected)

Надеюсь, это поможет!

0 голосов
/ 23 мая 2011

- ПОПРОБУЙТЕ ЭТО -

select name= case when isnumeric(empname)= 1 then 'numeric' else 'notmumeric' end from [Employees]

Но преобразование прекращено невозможно

select empname=
case
when isnumeric(empname)= 1 then empname
else 'notmumeric'
end
from [Employees]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...