Ответ 1
Вы не можете отличить float и сохранить строку в том же столбце. Вы можете сделать это так, чтобы получить значение null, когда isnumeric возвращает 0.
SELECT CASE ISNUMERIC(QTY) WHEN 1 THEN CAST(QTY AS float) ELSE null END
У меня есть столбец, содержащий символы и цифры
12
13
14
19K/YR
22
Таким образом, тип столбца - varchar. Но затем я также делаю некоторые вычисления с этим столбцом, поэтому я пытаюсь преобразовать данные в float, если они являются числовыми.
Это дает мне ошибку:
SELECT CASE ISNUMERIC(QTY)
WHEN 1 THEN CAST(QTY AS float)
ELSE QTY
END AS test
Вы не можете отличить float и сохранить строку в том же столбце. Вы можете сделать это так, чтобы получить значение null, когда isnumeric возвращает 0.
SELECT CASE ISNUMERIC(QTY) WHEN 1 THEN CAST(QTY AS float) ELSE null END
.. продление ответов Микаэля
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 проблемы (например, +
-
.
и пустая строка принимается)Я нашел эту очень раздражающую ошибку при преобразовании значений 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)
Надеюсь, это поможет!
- ПОПРОБУЙТЕ ЭТО -
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]