SQL将varchar列转换为float

时间:2014-03-12 13:40:57

标签: sql type-conversion varchar

导入工具将几列中的每一列都设置为varchar(max),我正在寻找将列转换为正确类型的最快方法。

这很好用,

ALTER TABLE dbo.myTable ALTER COLUMN myColumn INT

但这很难失败

ALTER TABLE dbo.myTable ALTER COLUMN myColumn FLOAT

有错误: Msg 8114,Level 16,State 5,Line 26 将数据类型varchar转换为float时出错。

如何执行从VarChar(max)类型到Float的通用列转换?


我在这些帖子中找到了一些提示,但我无法将其转换为:

Convert varchar to float IF ISNUMERIC

Error converting data type varchar

error converting varchar to float

select case isnumeric([myColumn]) when 1 then cast([myColumn] as float) else null end
from dbo.myTable

SELECT TOP (100) CAST(CASE WHEN IsNumeric([myColumn]) = 1 THEN [myColumn] ELSE NULL END AS float) AS [myColumn]
FROM         dbo.myTable
WHERE     ([myColumn] NOT LIKE '%[^0-9]%')

似乎ISNUMERIC存在一些问题?

我不希望这样做,因为要编辑很多列,是否有像ALTER TABLE这样的单行转换在大多数或所有场景中都有效?

或者有人建议将数据保存到临时列中?如果有人可以将代码发布到tempColumn中然后转换原始文件并删除tempColumn,那将是另一个有效的解决方案。

1 个答案:

答案 0 :(得分:4)

系统的小数分隔符是否与varchar字段的内容配置方式相同? 在您的情况下,我会建议您使用新列(FLOAT)而不是更改现有列。然后用更新填充该字段。

这是一种将文本显式转换为float的方法。在SQL Server中查询:

select cast(replace('12,5',',','.') as float)*2

重申25作为回应。这意味着成功转换为FLOAT

所以要用新的col来填充你可以做的铸造值:

UPDATE Table SET FloatField=CAST(REPLACE(TextField,',','.') AS FLOAT)

替换,为。 (如果有的话),然后转换为FLOAT。希望这有帮助。