MySQL 插入不正确的十进制值

标签 mysql sql

我有以下查询:

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/

相关文章:

MYSQL子查询并计算包含某个值的行数

php - 我如何在 php 中将默认字符集设置为空

php - 如何获取数组中给定结果之前和之后的sql结果

mysql - 在 mysql 中查找后继列或前列之间具有异常差异的列

mysql - 如何使用两列获取过去的记录和即将到来的记录

mysql - 为mysql中具有相同列名的3个表分配唯一的id

Mysql 找到所有用户的共同值

mysql - 内部联接后仅返回重复记录

mysql - SQL:如何使用 GROUP BY 来获取聚合的聚合?

sql - 使用 SQL Server 代理作业发送 HTTP 请求