写一个存储过程循环更新
修改重复号码的最后四位为自增数字
length()长度函数
lPAD(i,4,'0') 左侧补0
分组查重复数据ID最大一条修改
BEGIN
declare i int default 0;
while i < 9999 do
UPDATE contacts set telephone = CONCAT(left(telephone,length(telephone)-4),lPAD(i,4,'0')) where id in(SELECT s.id from (SELECT COUNT(id)as num,MAX(id) as id ,telephone from contacts GROUP BY telephone) s where s.num>1);
set i = i + 1;
end while;
END
注:应该用char_length
mysql:
utf-8:length()一个汉字3个长度
gbk:length()一个汉字2个长度
oracle:
utf-8:length()一个汉字3个长度
gbk:length()一个汉字1个长度
字母和数字都是1个长度.
char_length()汉字、字母、数字都是1个长度,PHP:mb_strlen($str,'utf8')
查询字符长度可以用:select length('汉') from dual
下面是补充说明length与char_length区别,length:是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符,char_length:不管汉字还是数字或者是字母都算是一个字符.