【问题标题】:SQL convert varchar column to floatSQL 将 varchar 列转换为浮点数
【发布时间】: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


【解决方案1】:

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

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

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

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

因此,要使用强制转换的值填充新的 col,您可以这样做:

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

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

【讨论】:

  • 标记为解决方案,因为我将 , 转换为 .然后alter表在两个失败的表上工作,但是为什么它对许多字段都有效,无论如何???看起来 ALTER TABLE 毕竟是处理这个问题的通用方法,只要您可以修改数据以匹配它所需的配置。
  • SQL Server 只识别 .作为小数分隔符。显然你的字符串使用 ,。这是在许多语言中发生的常见问题。您可以在替换 , for 后执行强制转换来解决这个问题。在字符串中以确保您在转换值时没有问题。
  • 我今天有另一张桌子和 , 到 .诀窍不工作。我只是以不同的方式导入表格,但最初的问题仍然是如何通用转换这些东西,所以我不需要手动更改数据?
  • 我建议您创建一个新字段 (Float) 而不是更改现有字段。然后执行更新,用转换后的数据填充这个新字段,用 . 替换 , 。在演员表之前。如果你愿意,我会给出一些更新查询的例子。
  • 是的,这个特定的任务已经完成,但是看看其他人是怎么做的会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多