這聽起來對我來說你的數據仍然有一些非數值的東西。我希望你的應用程序在輸入數據前清理你的數據做得非常好,而且問題可能是你在一個或多個字段中有'$'。 如果您有非數字字符,則演員將失敗。在其中(因爲你可能知道這是你刪除'''的原因)。 我跑下面的腳本來測試這個。
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