Es klingt wie Ihre Daten immer noch etwas, das nicht numerisch ist. Ich hoffe, dass Ihre Anwendungsseite eine gute Arbeit geleistet hat, um Ihre Daten vor der Eingabe zu bereinigen, und das Problem ist wahrscheinlich, dass Sie ein "$" in einem oder mehreren Ihrer Felder haben. Der Cast wird fehlschlagen, wenn Sie einen anderen als den '.' darin (wie du wahrscheinlich weißt, weshalb du ',' entfernt hast). Ich habe das folgende Skript ausgeführt, um dies zu testen.
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;
Sie können versuchen, die unten stehende Skript auf der Säule in Frage ausgeführt, welche Spalten Sie ein Problem mit haben, um zu sehen:
--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
*/
Sie fix wird also sein, einfach die Zeile, die Sie zur Verfügung gestellt ändern :
UPDATE Overseas SET SalesValue = CONVERT(FLOAT, REPLACE(REPLACE([SalesValue],',',''),'$',''))
Es sei denn, Sie fanden andere Zeichen in den Ergebnissen des vorherigen Skripts.
Sind diese Geldbeträge? Ich würde nicht empfehlen, mit FLOAT zu beginnen. Verwenden Sie DECIMAL oder GELD. Und das Problem wird nicht mit den Dezimalwerten sein, die Sie als Beispiele angegeben haben. Es wird mit den Werten sein, die nicht in Dezimalzahlen umgewandelt werden können (wie Dollarzeichen $). –
Diese Werte sind alle in den Float-Datentyp konvertierbar. SELECT CAST ('201.01' AS FLOAT) SELECT CAST ('40 .50' AS FLOAT) SELECT CAST ('215.12' AS FLOAT) SELECT CAST ('550' AS FLOAT) SELECT CAST ('304,201' AS FLOAT) – Tarzan
Ist etwas anderes los? – Tarzan