我有一个包含字符和数字的列
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) 我目前有一个列为列的表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)
获取将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.