标签:sql
执行如下sql,报了mysql 1292 错误码及描述:Truncated incorrect DOUBLE value ……
update act_code set status=3,`activeTime`=now() where id in(
select id from (
select id from act_code where status=0 and serialNo between 712600001060 and 712600001061
) t ) ;
?
先说正确的sql,如下:
update act_code set status=3,`activeTime`=now() where id in(
select id from (
select id from act_code where status=0 and serialNo between ‘712600001060‘ and ‘712600001061‘
) t ) ;
?
看出区别来了吗? ?只是在子查询中 between and 后的参数多了单引号
?
数据库中表 act_code 字段是varchar类型
?
当独执行如下sql时(未加单引号),是没问题的
select id from act_code where serialNo between 712100000041 and 712100000068;
?
但是当放到单表更新子查询中(第一个sql),就报了mysql 1292 的错
而唯一的差别就是varchar字段作为条件语句时其参数没加单引号
?
所以,你懂的,其实不是mysql语法解析弱智
只是sql的规范,可能写顺手了就忘了写单引号造成的语法错误
?
标签:sql
原文:http://bdceo.iteye.com/blog/2259957