【问题标题】:Error converting data type varchar to float in assigned column在分配的列中将数据类型 varchar 转换为浮点数时出错
【发布时间】:2020-07-30 17:58:27
【问题描述】:

嘿,我正在尝试将数据类型从 varchar 转换为列名“标识”的浮点数。以下是我创建的查询,两者都抛出错误

Select distinct Convert(float,(Replace([Identification], '-','')))  FROM [A]
where identification is NOT Null;


Select Cast(Replace([Identification], '-','') AS FLOAT) FROM [A]
where identification is NOT Null;

错误消息:
消息 8114,第 16 级,状态 5,第 1 行
将数据类型 varchar 转换为 float 时出错。

【问题讨论】:

  • 报错是告诉你问题所在,报错你不明白怎么办,我们可以尝试详细说明。此外,SQL Server 2008 已经停止支持一年多,您应该真正考虑升级。因为您使用的是不受支持的,所以您甚至无法访问 TRY_CAST/TRY_CONVERT,这确实会阻碍您修复数据。
  • 我知道问题出在哪里。但我正在努力解决这个问题。您能告诉我如何更改数据类型吗?我也使用了 Cast and Convert 功能,但它不起作用。检查我上面的回复
  • 您的列中有错误数据。这只是为什么在(n)varchar 中存储数字数据是一个坏主意的原因之一,您需要修复您的设计。不幸的是,就像我提到的,当您使用不受支持的软件时,您不能使用TRY_CONVERT;我个人建议你现在真的看看这些升级。
  • 我无法升级,因为我没有访问权限。那是 DBA 的工作。我需要将解决方案整理到我的域中

标签: sql sql-server sql-server-2008


【解决方案1】:
Haaaz, try this:

   CASE WHEN ISNUMERIC([Identification]) THEN CONVERT(float, 
    [Identification])

【讨论】:

  • 我仍然在下面遇到同样的错误。 “消息 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为浮点数时出错。”
  • 请输入您当前的查询
  • Select Cast(Replace(Replace([Identification], '-',''),',','') AS FLOAT) FROM [A] where Identification is NOT Null;
  • 请尝试新查询
【解决方案2】:
select cast('' as xml).value('xs:float(sql:column("val"))', 'float')
from (values ('a'),('b'), ('-123'))  v(val);



CREATE TABLE ATest(Identification varchar(100));

INSERT INTO ATest(Identification) 
VALUES('A'),('B'), ('A-B-123'), ('123-456'), ('1-1-1-1-1'), 
('123-E10'), /*you might need to handle this type of values when scientific notation should NOT be converted to float...
....eg. just replace E with another letter*/
('------1------')
;

SELECT
    Identification, ReplacedIdentification, 
    cast('' as xml).value('xs:float(sql:column("src.ReplacedIdentification"))', 'float') as ToFloatOrNull
FROM
(
Select [Identification], Replace([Identification], '-','') ReplacedIdentification
FROM [ATest]
WHERE[Identification] IS NOT Null
) as src
--use this to find Identification values which cannot be converted to float
--WHERE cast('' as xml).value('xs:float(sql:column("src.ReplacedIdentification"))', 'float') IS NULL;

DROP TABLE Atest;
GO

【讨论】:

  • 我没听明白。你能解释清楚吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多