导入工具将每个列作为 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 类型的通用列转换?
我在这些帖子中找到了一些提示,但我无法将其转换:
如果 ISNUMERIC 将 varchar 转换为 float
转换数据类型 varchar 时出错
将 varchar 转换为 float 时出错
select case isnumeric([myColumn]) when 1 then cast([myColumn] as float) else null end
from dbo.myTable
and
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,这将是另一个有效的解决方案。
系统的小数点分隔符的配置方式是否与 varchar 字段的内容相同?
对于您的情况,我会建议您创建一个新列(FLOAT)而不是更改现有列。然后用更新填充该字段。
这是一种将文本显式转换为浮动的方法。在 SQL Server 中此查询:
select cast(replace('12,5',',','.') as float)*2
结果 25 作为响应。这意味着成功转换为FLOAT
因此,要使用强制转换值填充新列,您可以执行以下操作:
UPDATE Table SET FloatField=CAST(REPLACE(TextField,',','.') AS FLOAT)
替换 , 为 。 (如果有的话)然后转换为 FLOAT。希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)