UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));
我使用它来修剪前导和尾随空间中的整个列,但我想要的是
|ID|Name |
|1 |demo 6 |
|2 |demo3 500 |
我想要的是通过删除这个int来修剪NAME,其中最后一个char是int。
输出
|ID|Name |
|1 |demo |
|2 |demo |
单独使用mysql是可行的吗?或者我将需要使用PHP更新表?
注意:此表包含大约20K行
编辑: 好的PHP就是,
$s='';
foreach($q as $row){
$d=$row->name;
while(is_numeric(substr($d,-1))){$d=rtrim($d, '0123456789');}
if(is_numeric(substr($row->name,-1)))
$s.="update name_list set name='".$d."' where id='{$row->id}';\n";
}
echo "count:".count(explode('\n',$s))."<br/><pre>$s</pre>";
如果我尝试逐个运行它们就会跑掉......
是否有更好的方法来修补更新行?
答案 0 :(得分:1)
不幸的是,MySQL目前(5.5)没有REPLACE()
的正则表达式版本。如果没有UDF或几次嵌套调用REPLACE()
,那么在MySQL中这样做是首选且速度更快的IMO,不是一个选择...
RTRIM(REPLACE(REPLACE(..., '8', ''). '9', ''))
注意:以上内容将替换所有数字。不只是那些正确的。留给未来的读者,但不会在OP的情况下工作。
因此,PHP是您唯一的选择。借用 Marc B :
// loop over all rows
$no_ending_digits = rtrim($field, '0123456789');
// update row