如何解决MySQL错误代码:1292。截断不正确的DOUBLE值?

4
我正在尝试使用下面所示的更新查询来更新2个不同的表格:

我试图使用以下的更新查询来同时更新两个不同的表:

UPDATE  db1.table1 a, db2.table1 b 
SET       b.firstname  =  a.firstname,
          b.lastname   =  a.lastname,
          b.address    =  a.address,
          b.state      =  a.state,
          b.city       =  a.city,
          b.zip        =  a.zip             

WHERE a.stud_id=b.stud_id AND a.firstname IS NOT NULL AND b.firstname IS NULL
          AND str_to_date(a.joindate,'%m/%d/%Y') >= str_to_date('02/01/2012','%m/%d/%Y');

但是当我尝试执行此查询时,MySQL一直提示以下错误。
Error Code: 1292. Truncated incorrect DOUBLE value: 'CROUGH0000'

虽然我在stackoverflow上找到了很多类似的帖子,但我找不到这个问题的确切解决方案。

需要一些帮助。提前感谢。


编辑:每个列的数据类型如下

              b.firstname(varchar(25))  =  a.firstname(varchar(52)),
              b.lastname(varchar(25))   =  a.lastname(varchar(35)),
              b.address(varchar(40))    =  a.address(varchar(50)),
              b.state(char(2))      =  a.state(char(2)),
              b.city(varchar(25))       =  a.city(varchar(25)),
              b.zip(varchar(11))        =  a.zip(varchar(11))

请在每个表中为 stud_idjoindate 添加数据类型。另外,请告诉我们值 'CROUGH0000' 来自哪里?那是 stud_id 吗? - Bill Karwin
4个回答

2

我遇到了这个错误,是因为我在更新两个查询时使用了 'and' 而不是逗号。

以下代码片段显示了该错误:

UPDATE employees 
SET 
lastname = 'Hill'and
email = 'mary.hill@classicmodelcars.com'
WHERE
employeeNumber = 1056;

以下片段展示了更正:

UPDATE employees 
SET 
lastname = 'Hill',
email = 'mary.hill@classicmodelcars.com'
WHERE
employeeNumber = 1056;

2
如果所有这些列都是 varchar(如上所述),那么问题必须出在 a.stud_id=b.stud_id 上。
检查表 a 和 b 中的数据类型。其中必须有一个是 DOUBLE,否则 MySQL 不会抱怨它。

@D Mac a.stud_id和b.stud_id具有相同的数据类型。 - ben
那么你之前所说的某些内容是错误的。根据我的经验,MySQL不会抛出任意的错误信息——其中一些数据类型为DOUBLE,这就是你的问题所在。找到它,你就会知道该如何修复。 - D Mac
@DMac 不一定,显然。参考 - WAF

0

我认为 joindate 列包含一个不是字符串日期的字符串值。

为了检查这一点,如果可能的话,我建议测试以下SQL命令

UPDATE db1.table1 a
      ,db2.table1 b 
SET b.firstname = b.firstname,
WHERE a.stud_id=b.stud_id 
  AND a.firstname IS NOT NULL 
  AND b.firstname IS NULL;

如果这个工作正常,那么没有任何改变,但您知道您的问题与 joindate 字段或 str_to_date 函数有关。
注意:b.firstname 被分配相同的值 -> 没有任何更改。

0

我遇到了一个意外问题,即使我在where子句中正确比较数据类型,仍然出现了相同的异常。

我之所以遇到这个异常,是因为我在尝试更新一个包含计划事件的表时,明显在where子句中比较了不同类型的字段。修复了这个问题之后,一切都正常了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接