相关疑难解决方法(0)

将varchar转换为float IF ISNUMERIC

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

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)

sql t-sql sql-server

14
推荐指数
2
解决办法
12万
查看次数

转换数据类型varchar时出错

我目前有一个列为列的表varchar.此列可以包含数字或文本.在某些查询期间,我将其视为一个bigint列(我在它与另一个表中的列之间进行连接bigint)

只要这个字段中只有数字没有问题,但是在这个字段中只有一行甚至一行有文本而不是数字我得到了"将数据类型转换varchar为错误bigint".错误,即使在WHERE部分,我确保没有文本字段出现.

为了解决这个问题,我创建了一个视图如下:

SELECT     TOP (100) PERCENT ID, CAST(MyCol AS bigint) AS MyCol
FROM         MyTable
WHERE     (isnumeric(MyCol) = 1)
Run Code Online (Sandbox Code Playgroud)

但即使视图仅显示具有数值的行并将Mycol强制转换为bigint,在运行以下查询时仍会出现将数据类型varchar转换为bigint错误:

SELECT * FROM MyView where mycol=1
Run Code Online (Sandbox Code Playgroud)

在对视图进行查询时,它不应该知道它背后发生了什么!它应该只是看到两个bigint领域!(参见附图,甚至mssql管理工作室显示视图字段为bigint)

sql t-sql sql-server

6
推荐指数
1
解决办法
4万
查看次数

将varchar转换为float的错误

获取将varchar转换为float的错误.

有一个表(不是我的制作)与列result,具有varchar数据.我想转换为float来获取所有值> 180.0.

SELECT result FROM table WHERE result > 180.0
Run Code Online (Sandbox Code Playgroud)

产生错误.有趣的是,尽管如此:

WITH temp AS (
  CASE
    WHEN ISNUMERIC(result)=1 THEN CAST(result as FLOAT)
    ELSE CAST(-1.0 AS FLOAT)
  END AS result
)
Run Code Online (Sandbox Code Playgroud)

这很好.当我配对时:

SELECT temp.result FROM temp WHERE temp.result > 180.0
Run Code Online (Sandbox Code Playgroud)

我再次收到错误.思考?

更新:完整代码请求...

WITH temp AS (
  SELECT
  CASE
    WHEN ISNUMERIC(result)=1 THEN CAST(result as FLOAT)
    ELSE CAST(-1.0 AS FLOAT)
  END AS result
  FROM table)

SELECT temp.result FROM temp WHERE temp.result > 180.0
Run Code Online (Sandbox Code Playgroud)

使用SQL-SERVER 2008 RC2.

t-sql sql-server

1
推荐指数
1
解决办法
3万
查看次数

标签 统计

sql-server ×3

t-sql ×3

sql ×2