我有以下查询:
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
并尝试了 if '', NULL - 相同的结果。
然后我做了 if '', 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 之外,任何人都有任何建议...不完全确定下一步要尝试什么。
所以,我通过分解它来确定记录。
所以我有两条记录,一条插入,另一条不插入...如果我执行
对于两条记录,我都返回 4 且单元格中的值为 0.00,因此它们似乎正在进行相同的转换,是否有任何提示/技巧可以在完成任何转换之前提取单元格的精确值?
谢谢
最佳答案
您似乎遇到余额
无法转换的问题。
如果您希望在这种情况下该值为零,您可以简单地执行以下操作:
SELECT storename, balance+0
这会进行隐式转换并且不会返回错误。否则,请使用正则表达式来查找有问题的值。像这样的事情:
SELECT balance
FROM superchart
WHERE balance not regexp '^[-]?[0-9]*[.]?[0.9]*$';
这应该返回有问题的值。
关于MySQL 插入不正确的十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872727/