将varchar转换为float IF ISNUMERIC

Pod*_*ays 14 sql t-sql sql-server

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

12
13
14
19K/YR
22
Run Code Online (Sandbox Code Playgroud)

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

这给了我一个错误:

SELECT CASE ISNUMERIC(QTY) 
         WHEN 1 THEN CAST(QTY AS float) 
         ELSE QTY 
       END AS test
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 31

您不能转换为浮动并将字符串保留在同一列中.当isnumeric返回0时,你可以这样做以获得null.

SELECT CASE ISNUMERIC(QTY) WHEN 1 THEN CAST(QTY AS float) ELSE null END
Run Code Online (Sandbox Code Playgroud)

  • 当然,除了ISNUMERIC再次失败这一事实:`选择CASE ISNUMERIC('£2')当1 THAST CAST('£2'AS float)时ELSE null END`.有没有人发现过一种情况,ISNUMERIC可以在没有一些捏造的情况下使用? (5认同)

gbn*_*gbn 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
  ...
Run Code Online (Sandbox Code Playgroud)
  • 两种数据类型需要两列
  • 添加e0修复一些ISNUMERIC 问题(例如+ - .接受空字符串)