2017-07-02 8 views
0

私は、次のクエリがありますMySQLの挿入、誤った小数点値

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

をので、私は見て:

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 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以外の提案はありません。次に試すものは何もわかりません。

私はレコードを分割してピンポイントしています。

だから私は二つのレコードを挿入し、私は両方のレコードのために

LENGTH(otherbalance)を行う場合は...私は4取り戻すと、セルの値が0.00ので、それでない別のものを持っています彼らはキャスティングが行われる前に、セルの正確な値を引き出すためのヒント/トリックはありますか?

おかげで、

+0

'balance'と' otherbalance'のデータ型は何ですか? –

+0

'FROM スーパーチャート AND company'は有効なSQLではありません。あなたのコードはコンパイルエラーで失敗するはずです。 –

+0

データ型はTEXT – losrob

答えて

1

あなたはbalanceを変換することができないとの問題を抱えているように思われます。

あなたは値が、その場合にはゼロになりたい場合は、単に行うことができます。

SELECT storename, balance+0 

これは、暗黙的な変換を行い、エラーを返しません。それ以外の場合は、正規表現を使用して問題のある値を見つけます。このようなもの:

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

これは問題の値を返します。

関連する問題