Sql-Server-2012

錯誤:將浮點數轉換為數字數據類型的算術溢出錯誤

  • April 21, 2020

不幸的是,我有一些不良數據,需要解決它。我在電子表格中有一個包裹列,其中包含一些無意中轉換為浮點數的包裹。我發布了一個問題來解決這個問題處理混合 varchar 和 float 數據類型的 sql 列 但是,現在當我嘗試以下程式碼時出現錯誤:

SELECT CAST(CAST(CAST([Parcel Number 2(max)] AS FLOAT) AS DECIMAL) AS NVARCHAR(255))
FROM XLSIMPORT WHERE [Parcel Number 2(max)] = '1.4515020001e+012'

我得到的錯誤是:

Msg 8115, Level 16, State 6, Line 41
Arithmetic overflow error converting float to data type numeric.    

該錯誤似乎表明DECIMAL未使用正確的精度和比例定義數據類型。預設值為DECIMAL(18,0),但您的預設值可能發生了什麼事?當我像您一樣執行下面的查詢時(只是更改為表變數並添加了精度和比例),我沒有收到任何錯誤。

DECLARE @test TABLE
([Parcel Number 2(max)] FLOAT)

INSERT INTO @test
       ( [Parcel Number 2(max)] )
VALUES  ( '1.4515020001e+012'  -- Parcel Number 2(max) - float
         )

SELECT CAST(CAST(CAST([Parcel Number 2(max)] AS FLOAT) AS DECIMAL(18,0)) AS NVARCHAR(255))
FROM @test WHERE [Parcel Number 2(max)] = '1.4515020001e+012'

作為一個僅供參考,如果我嘗試DECIMAL(12,0).

引用自:https://dba.stackexchange.com/questions/142510