在开发中经常会遇到在表中新增一列字段,且新增字段的值与表原字段的值相关的情况,如新增时间年,时间月方便进行范围查询或聚合操作等。当遇到一些特殊情况,如需要生成一个id,以列数据创建时间年月日时分为前缀,以当日创建次数为后缀,这种需要记录条件下次数的需求,就可以使用变量解决。
sql如下:
SET @c=1;
SET @d=null;
update xxx t1
JOIN(
select CONCAT(DATE_FORMAT(create_Time,'%Y%m%d%H%i'),
IF(@d=DATE_FORMAT(create_Time,'%Y%m%d%H%i'),@c:=@c+1,@c:=1)) as info_id,
@d := DATE_FORMAT(create_Time,'%Y%m%d%H%i'),
id
from xxx
) t2
on t1.id=t2.id
SET t1.info_id = t2.info_id;
需要注意的是变量不可以在子查询种声明,因为声明的分号在sql是一条语句的结尾.