将数据类型nvarchar转换为float - nvarchar以将其转换为int时出错

时间:2014-04-17 10:26:05

标签: sql sql-server

我没有那么多编写SQL查询的经验,而且我遇到了一个问题。我已经将数据表读入临时表(#Temp_Results),并且需要在将数据移动到结束表之前更改各种列的格式。 我在下面尝试做的是取一个nvarchar的列(Oil2)并将其转换为tinyint并将结果放入一个新列(Oil4)然后丢弃Oil2 - 我意识到我将丢失小数位但这不是问题。 CASE语句旨在捕获任何非数字的内容,因为原始数据类型是nvarchar,其中可能有任何内容,我只对这些数字感兴趣。

然而,当我运行代码时,我得到'将数据类型nvarchar转换为float的错误'指向'UPDATE'代码行,我无法弄清楚如何绕过它。

你们中间有人能发现我的菜鸟错误吗?

ALTER TABLE tempdb..#Temp_Results       /*Add new column with datatype of tinyint*/ 
ADD Oil4 tinyint
GO

UPDATE tempdb..#Temp_Results            
SET tempdb..#Temp_Results.Oil4 = CASE 
WHEN ISNUMERIC(tempdb..#Temp_Results.Oil2)=1
THEN CAST(ROUND(CAST(tempdb..#Temp_H_Results.Oil2 as float), 0) AS tinyint)
ELSE NULL
END

ALTER TABLE tempdb..#Temp_H_Results     /*Drop redundant column of data in wrong (nvarchar) format*/
DROP COLUMN Oil2
Go

1 个答案:

答案 0 :(得分:0)

尝试转换为Decimal而不是float

CONVERT(varchar(28), cast(tempdb..#Temp_H_Results.Oil2 as decimal(28,0)))