将varchar转换为float IF ISNUMERIC

时间:2011-05-23 03:38:26

标签: sql sql-server tsql

我有一个包含字符和数字的列

12
13
14
19K/YR
22

所以列类型是varchar。但是后来我也在用这个列进行一些计算,所以我试图将数据转换成float,如果它是数字的。

这给了我一个错误:

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

4 个答案:

答案 0 :(得分:31)

您无法强制转换为浮动并将字符串保留在同一列中。当isnumeric返回0时,你可以这样做得到null。

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

答案 1 :(得分:11)

..扩展Mikaels的答案

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 issues(例如+ - .并且接受了空字符串)

答案 2 :(得分:2)

我在使用ISNUMERIC转换EmployeeID值时发现了这个非常烦人的错误:

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)

希望这有帮助!

答案 3 :(得分:-1)

- 尝试一下 -

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]