2017-07-02 85 views
0

我有以下查詢:MySQL的插入不正確的十進制值

INSERT INTO DUMP (storename, 
        balance, 
        otherbalance) 
SELECT storename, 
     IF(balance = '', 0.0, CAST(balance AS DECIMAL (9,2))) AS balance, 
     IF(otherbalance = '', 0, CAST(otherbalance AS DECIMAL(9,2))) AS otherbalance 
FROM superchart 
AND storename IN ('Superstore') 

我不斷收到:

Incorrect decimal value: '' for column '' at row -1 

所以我看了看: Incorrect DECIMAL value when inserting MySQL

,並試圖如果 '', NULL - 相同的結果。

然後我做了,如果「」,0.0 - 相同的結果

我只是不明白怎麼回事,我可以針點究竟是什麼壞...我知道這是什麼東西在「otherbalance」列,因爲如果我這樣做:

INSERT INTO DUMP (storename, 
        balance, 
        otherbalance) 
SELECT storename, 
     IF(balance = '', 0.0, CAST(balance AS DECIMAL (9,2))) AS balance, 
     '0.0' AS otherbalance 
FROM superchart 
AND storename IN ('Superstore') 

它實際上工作,我只是不知道如何品脫點記錄是不好的。

任何機構除IF =''外,還有其他建議,NULL ...不完全確定接下來要嘗試什麼。

所以,我已經把它分解出來了,

所以我有兩個記錄,一個插入和另一個不...如果我的兩個記錄做

長度(otherbalance)我回來4單元格中的數值是0.00,因此似乎他們正在鑄造相同的東西是否有任何提示/技巧在任何鑄造完成之前拉出細胞的確切值?

感謝,

+0

「balance」和「otherbalance」的數據類型是什麼? –

+0

'從 superchart AND company'是無效的SQL。您的代碼會因編譯器錯誤而失敗。 –

+0

數據類型爲TEXT – losrob

回答

1

你似乎有一個問題,balance不能夠被轉換。

如果你想要的值爲零在這種情況下,你可以簡單地做:

SELECT storename, balance+0 

這不會隱式轉換,並且不返回錯誤。否則,使用正則表達式來查找違規值。類似這樣的:

SELECT balance 
FROM superchart 
WHERE balance not regexp '^[-]?[0-9]*[.]?[0.9]*$'; 

這應該返回違規值。