有a,b两个表,需要将a表数据,插入b表,但是提示报错,看代码:--创建a表
CREATE TABLE `a` (
  `aid` int(11) DEFAULT NULL,
  `ades` varchar(50) DEFAULT NULL
);
INSERT INTO `a` VALUES (1,'1a'),(2,'2a'),(3,'3a'),(4,'4a'),(5,'5a');
--创建b表
CREATE TABLE `b` (
  `bid` int(11) DEFAULT NULL,
  `bdes` decimal(20,8) DEFAULT NULL
);
--复制数据
INSERT into b (bid,bdes) SELECT aid,CAST(ades AS DECIMAL(20,8)) FROM a;报错:
[Err] 1292 - Truncated incorrect DECIMAL value: '1a'请问这个是为什么?高手请解释下。

解决方案 »

  1.   

    a表中ades本来就是varchar格式啊,我是想转换成和b表中bdes格式一样,然后再复制的啊
      

  2.   

    字符->DECIMAL?直接0+字符不行?
      

  3.   


    INSERT INTO b (bid,bdes)
    SELECT aid,(ades+0) as ades1 FROM a;你说的这个啊,这个也报错啊
    [Err] 1292 - Truncated incorrect DOUBLE value: '1a'
      

  4.   

    跟mysql的版本有关吧。mysql> INSERT into b (bid,bdes) SELECT aid,CAST(ades AS DECIMAL(20,8)) FROM a;
    Query OK, 5 rows affected (0.03 sec)
    Records: 5  Duplicates: 0  Warnings: 0mysql> select * from b;
    +------+------------+
    | bid  | bdes       |
    +------+------------+
    |    1 | 1.00000000 |
    |    2 | 2.00000000 |
    |    3 | 3.00000000 |
    |    4 | 4.00000000 |
    |    5 | 5.00000000 |
    +------+------------+
    5 rows in set (0.00 sec)
    mysql> select @@version;
    +------------------+
    | @@version        |
    +------------------+
    | 5.1.46-community |
    +------------------+
    1 row in set (0.01 sec)
      

  5.   

    ..我的mysql版本是5.5.13,我的版本还比你高,怎么还出错呢。。郁闷啊!!!!
      

  6.   

    刚刚测试了下 直接select是不会报错的 只有warnings
    做insert的时候会报错