SQL 将 varchar 列转换为 float

标签 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。

最佳答案

系统的小数点分隔符是否与 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)

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

关于SQL 将 varchar 列转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353371/

相关文章:

mysql - 我的触发器语句出错

sql - MySQL 有没有办法选择返回行的开头和结尾的顺序?

mysql - 限制数据库级别的关联记录数

php - MySQL - 如果午夜过去了,则获取昨天的数据

python - 将列表传递给需要相同长度元组的函数

c++ - C++中将string转int,测试成功

python - 如何将 Numpy 数组转换为 Panda DataFrame

mysql - 使用 MySQL VARCHAR 时非英语字符更重要?

MySQL 错误 #1071 - 指定的键太长;最大 key 长度为 767 字节

mysql - 在一个大表中搜索 varchar