求一条mysql 语句,update 的语句

数据库有如下的数据:
id value
1 N
2 M.
3
4 CH
5 C.H.
6 V M
7 C. E.
8
9 E
10 JR
...
...
想修改为:

1 N.
2 M.
3
4 C.H.
5 C.H.
6 V.M.
7 C.E.
8
9 E.
10 J.R
...
...

总的说来就是要每个value字母后面要求有个“.”,现在的数据中有的有了,有的没有,只要在没有的后面加个“.”即可

如表名为tb2

第一步先去除所有空格
update tb2 set value=REPLACE(value,' ','');
第二步去除所有已有的'.'
update tb2 set value=REPLACE(value,'.','');

1位字母的:
update tb2 set value=CONCAT(value,'.') where length(value)=1 and value!='.';

2位字母的:
update tb2 set value=CONCAT(SUBSTRING(value,1,1),'.',SUBSTRING(value,2,1),'.') where length(value)=2 and value not like '%.%';

3位字母的:
update tb2 set value=CONCAT(SUBSTRING(value,1,1),'.',SUBSTRING(value,2,1),'.',SUBSTRING(value,3,1),'.') where length(value)=3 and value not like '%.%';

4位字母的:
..................
以些类推。

如果由程序控制的话,可以从以下规律着手:
变量t为字母位数,m为累加变量为1到t,先去除空格和已有'.'后的更新语句为:
update tb2
set
value=CONCAT(SUBSTRING(value,1,1),'.',SUBSTRING(value,2,1),'.',................,SUBSTRING(value,t,1),'.')
where length(value)=t and value not like '%.%';
即:value的值为CONCAT()里面重复SUBSTRING(value,m,1),'.',重复的次数由字母位数t决定,第一次m为1,第二次m为2,。。。。第t次m=t,然后结束CONCAT()。条件为 length(value)=t且value里本身没有'.'。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-07
首先update 不会执行两次,检查程序是不是有两次执行的逻辑问题,排除页面二次提交的情况。祝你好运。 mysql不会无故执行两次的,应该是你的程序里有追问

不用程序执行,手动执行SQL 即可

第2个回答  2011-05-07
update @temp
set s = s+'.'
where s not like '%.'
and isnull(s ,' ')!=' '追问

谢谢你的帮忙,可是对于CH 或者V M 的数据,在字母间就少了一个".", 能不能把这个字符串拆开,加了"."以后再组合到一起呢

追答

update @temp
set s = replace(s,' ','.')+'.'
where s like '_ _'

update @temp
set s = substring(s,1,1)+'.' +substring(s,2,1)+'.'
where len(s)=2

第3个回答  2011-05-07
最简单的方法:直接写update语句
$sql=update a set a= b= c= where value!='';
有点个复杂的方法----搜出来一个个的修改 ,当然,还是针对没有value的修改。
$sql1=select * from biaoming where value !='';
$query=mysql_query($sql1);
while($rs=mysql_fetch_array($query)){
$value=$rs['value'];
$sql2=update。。。。。。
mytsql_query($sql2);
}

$sql2=update value set
第4个回答  2011-05-15
带/的直接replace好像不行
因为/在sql语句中用于转义字符中,一般与escape同用
所以要转化的时候,额
你先查查select * from A where record like '%'的条数是不是和select * from A where record like 'http%'查出来的一样多,并且确认是否select * from A where record like '%'是你要修改的那些数据
如果是的话
最好用:
update A set record=replace(record,'xxx','abc') where record like '%'