【发布时间】:2014-04-17 10:26:04
【问题描述】:
我没有太多编写 SQL 查询的经验,我遇到了一个问题。我已将数据表读入临时表 (#Temp_Results),需要在将数据移动到最终表之前更改各种列的格式。 我在下面尝试做的是取一个 nvarchar 列(Oil2)并将其转换为 tinyint 并将结果放入一个新列(Oil4)然后删除 Oil2 - 我意识到我会丢失小数位但那不是问题. CASE 语句旨在捕获任何不是数字的东西,因为原始数据类型是 nvarchar,所以里面可能有任何东西,我只对数字感兴趣。
但是,当我运行代码时,我得到指向“更新”代码行的“将数据类型 nvarchar 转换为浮点数时出错”,我不知道如何绕过它。
你们中的任何人能发现我的菜鸟错误吗?
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
【问题讨论】:
标签: sql sql-server