2014-12-04 65 views
1

我有兩個表。第一個表(Table1)用於獲取記錄,第二個表(Table2)用於插入第一個表記錄。但得到結果後我有點困惑。SQL自動舍入值

在表1和表2列 「金額」 具有相同的數據類型,例如爲nvarchar(最大)

表1

Id Amount 
1 Null 
2 -89437.43 
2 -533.43 
3 22403.88 

如果我運行此查詢

Insert into Table2(Amount) 
Select Amount from Table1 

然後得到結果像這樣,我不知道爲什麼值會自動舍入

Table2 

Id Amount 
1 Null 
2 -89437.4 
2 -533.43 
3 22403.9 
+2

這兩個表中的列的數據類型是什麼? – 2014-12-04 12:06:54

+0

您是否嘗試過使用DECIMAL作爲類型? – PKirby 2014-12-04 12:07:30

+0

@Greg'nvarchar(max)'它在問題中。不知道爲什麼數值存儲在'nvarchar'字段中? – Tanner 2014-12-04 12:08:50

回答

2

SQL Server 轉換回來和從字符串類型轉換浮點值。
然後,你還要空字符串爲0的樂趣位,以及其他奇怪的效果

SELECT CAST(CAST('' AS float) AS nvarchar(MAX)) 
SELECT CAST(CAST('0.E0' AS float) AS nvarchar(MAX)) 

使用十進制。

如果你需要存儲「空白」(這如何從NULL有什麼不同?)使用一個單獨位列允許額外的價值

+0

我的金額列只存儲7位數字,如1234567是123456.如何使用select查詢存儲超過7位數字。 – 2014-12-04 12:42:09

+0

不要截斷它。你仍然有四捨五入的錯誤。 – gbn 2014-12-04 12:45:03

0

也許這是你的查詢工具,現在已截斷爲8個字符。

檢查的實際長度字段,看看問題是否真的是在數據庫:

SELECT LEN(Amount) 
FROM Table2 
WHERE Amount LIKE '%-89437.%' 
+0

但是一個被截斷爲7.我很確定我們沒有從OP得到完整的準確的故事。 – Paparazzi 2014-12-04 16:37:20

1

Here是你的問題很好的解釋。

非此即彼你明確給出浮動或十進制或數字(XX,X)(X表示數值)

然後它會轉換爲數據,其他明智它四捨五入的最後一個值。

Insert into Table2(Amount) 
Select cast(Amount as numeric(18,2) --or , cast (Amount as float) 
from Table1 

檢查此鏈接: - TSQL Round up decimal number

1

在我來說,我在做轉換爲正確的數據類型,但十進制(18,0)有在表中的列。因此,確保小數點位數正確表示爲小數點(18,2)。