这听起来对我来说你的数据仍然有一些非数值的东西。我希望你的应用程序在输入数据前清理你的数据做得非常好,而且问题可能是你在一个或多个字段中有'$'。 如果您有非数字字符,则演员将失败。在其中(因为你可能知道这是你删除'''的原因)。 我跑下面的脚本来测试这个。
declare @myFloat float;
declare @test1 nvarchar(10) = '145.88';
declare @test2 nvarchar(10) = '4,145.88';
declare @test3 nvarchar(10) = '$4,145.88';
SELECT ISNUMERIC(@TEST3)
set @myFloat = CONVERT(FLOAT, REPLACE(@test1,',',''));
select @myFloat;
set @myFloat = CONVERT(FLOAT, REPLACE(@test2,',',''));
select @myFloat;
--THIS WILL FAIL
set @myFloat = CONVERT(FLOAT, REPLACE(@test3,',',''));
select @myFloat;
--THIS WILL NOT FAIL
set @myFloat = CONVERT(FLOAT, REPLACE(REPLACE(@test3,',',''),'$',''));
select @myFloat;
你可以尝试运行有问题的列下面的脚本,看看您有一个问题,列:
--run this on your table
SELECT SalesValue
FROM Overseas
WHERE ISNUMERIC(REPLACE(SalesValue,',','')) = 0
--test sample
/*
insert into #myTable
values ('145.88'),
('4,145.88'),
('$4,145.88'),
('$4,145.88%');
SELECT *
FROM #myTable
WHERE ISNUMERIC(REPLACE(amounts,',','')) = 0
--WHERE ISNUMERIC(REPLACE(REPLACE(amounts,',',''),'$','')) = 0 --this will remove results with $ also
*/
所以你弄不好会是简单地改变你所提供的线:
UPDATE Overseas SET SalesValue = CONVERT(FLOAT, REPLACE(REPLACE([SalesValue],',',''),'$',''))
除非您在前面的脚本结果中找到其他字符。
1日投值这些钱数额?不建议使用FLOAT开始。使用DECIMAL或MONEY。问题不在于你给出的十进制值作为例子。这将与无法转换为小数的值(如美元符号$)一起使用。 –
这些值都可以转换为float数据类型。 SELECT CAST( '201.01' AS FLOAT) SELECT CAST('40 0.50' AS FLOAT) SELECT CAST( '215.12' AS FLOAT) SELECT CAST( '550' AS FLOAT) SELECT CAST( '304.201' AS FLOAT) – Tarzan
还有其他事情吗? – Tarzan