用mysql插入数据的时候,报了上面的错误。

语句类似:INSERT INTO t_aa(c1,c2,c3,a1,a2,a3)
SELECT t1,t2,t3,b1,b2,b3
FROM
(
SELECT, t1,t2,t3
cast(ifnull(d1,’0′)as decimal(8,1) b1,
cast(ifnull(d2,’0′) as decimal(8,1) b2,
cast(ifnull(d3,’0′)as decimal(8,1) b3

from tt) xx

d1,d2,d3是字符串类型

单独查询没问题,都有数据,b1,b2,b3都有数据,没有空值。d1,d2,d3的空值(是”,非null)都转成0.0了,把select语句插入insert后时就报错了。网上mysql中出现Incorrect DECIMAL value: ‘0’ for column ” at row -1错误解决方案 – WKellyL – 博客园 (cnblogs.com)里的第二种 方法也试了,不管是用convert,cast还是round函数都没用。原以为是b1,b2,b3字段插入的问题,删掉了b1,b2,b3字段插入,还是报一样的错。

最终发现是d1,d2,d3存在空串引起的,还是需要把空串转成数字0,而不仅仅是null传要转。

即 cast(if(a.score=” ,’0′,a.score) AS DECIMAL(8,1) ) sc1。太Tm折腾。

相信用文章里的第一种 方法早就解决了。