【发布时间】:2014-04-16 16:43:20
【问题描述】:
导入工具将每列作为 varchar(max) 放入多个表中,我正在寻找将列转换为正确类型的最快方法。
这很好用,
ALTER TABLE dbo.myTable ALTER COLUMN myColumn INT
但是这失败得很惨
ALTER TABLE dbo.myTable ALTER COLUMN myColumn FLOAT
出现错误: 消息 8114,第 16 级,状态 5,第 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,这将是另一个有效的解决方案。
【问题讨论】:
-
您使用的是什么版本的 SQL Server?
-
SQL Server 管理研究 2008 R2。此外,alter table 语句似乎适用于大多数列,只有两个表浮动失败。
标签: sql type-conversion varchar