SQL 将 varchar 列转换为 float

JPK*_*JPK 5 sql varchar type-conversion

导入工具将每个列作为 varchar(max) 放入多个表中,我正在寻找将列转换为正确类型的最快方法。

这工作正常,

ALTER TABLE dbo.myTable ALTER COLUMN myColumn INT
Run Code Online (Sandbox Code Playgroud)

但这惨败了

ALTER TABLE dbo.myTable ALTER COLUMN myColumn FLOAT
Run Code Online (Sandbox Code Playgroud)

出现错误:消息 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
Run Code Online (Sandbox Code Playgroud)

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]%')
Run Code Online (Sandbox Code Playgroud)

ISNUMERIC 似乎有一些问题?

我不想这样做,因为有很多列需​​要编辑,是否有像 ALTER TABLE 这样的单行转换适用于大多数或所有场景?

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

eri*_*pap 4

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

\n\n

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

\n\n
select cast(replace('12,5',',','.') as float)*2\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果 25 作为响应。这意味着成功转换为FLOAT

\n\n

因此,要为新的 col 填充铸造值,您可以执行以下操作:

\n\n
UPDATE Table SET FloatField=CAST(REPLACE(TextField,',','.') AS FLOAT)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n