你可以只是做
CAST(CAST(value AS float) AS decimal(36, 20))
但...
如果你這樣做,cast-to-float也會更改所有內部沒有E的值 - 因爲浮點數只能與t精確一致他機-epsilon ...
你可以減輕,只有鑄造浮動如果數字包含E(+/-)。
如果它是一個正常的十進制數,只需直接轉換爲十進制數。
這將最大限度地減少浮動四捨五入錯誤。
SELECT
CASE
WHEN factor LIKE '%E-%' THEN CAST(CAST(factor AS FLOAT) AS DECIMAL(36, 20))
WHEN factor LIKE '%E+%' THEN CAST(CAST(factor AS FLOAT) AS DECIMAL(36, 20))
ELSE CAST(factor AS DECIMAL(36, 20))
END AS factor
FROM T_IFC_Import_Currency
或者更緊湊:
SELECT
CASE
WHEN factor LIKE '%E[+-]%' THEN CAST(CAST(factor AS FLOAT) AS DECIMAL(36, 20))
ELSE CAST(factor AS DECIMAL(36, 20))
END AS factor
FROM T_IFC_Import_Currency
注:因爲這意味着案件expressi
SELECT
CAST
(
CASE
WHEN factor LIKE '%E[+-]%' THEN CAST(factor AS FLOAT)
ELSE factor
END
AS decimal(36,20)
) AS factor
FROM T_IFC_Import_Currency
:
不要簡化這在第一次隱式投射之前,它被投射到十進制...
這是一個很好的教訓嗎?不要將數字作爲字符串存儲在第一位? –
我同意數字應該存儲爲數字而不是字符串。但我正在進行數據遷移,並且源數據不在我的控制範圍之內。 – Tilak