Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库中的mysql修剪列_Php_Mysql_Codeigniter_Trim - Fatal编程技术网

Php 数据库中的mysql修剪列

Php 数据库中的mysql修剪列,php,mysql,codeigniter,trim,Php,Mysql,Codeigniter,Trim,我用它从前导和尾随空间修剪整个列,但我想要的是 UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn)); 我想要的是通过删除这个int来修剪最后一个字符为int的名称 输出 |ID|Name | |1 |demo 6 | |2 |demo3 500 | 单独使用mysql是否可行?或者我需要使用php来更新表 注:此表包含约20K行 编辑: 好的 |ID|Name | |1 |demo | |2 |demo

我用它从前导和尾随空间修剪整个列,但我想要的是

UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));
我想要的是通过删除这个int来修剪最后一个字符为int的名称

输出

|ID|Name      |
|1 |demo 6    |
|2 |demo3 500 |
单独使用mysql是否可行?或者我需要使用php来更新表

注:此表包含约20K行

编辑: 好的

|ID|Name      |
|1 |demo      |
|2 |demo      |
$s='';
foreach($q作为$row){
$d=$row->name;
而(是数字的(substr($d,-1)){$d=rtrim($d,'0123456789');}
if(是数字(substr($row->name,-1)))
$s.=“更新名称\列表集名称=”。$d.“'其中id=”{$row->id}';\n”;
}
echo“count:”.count(分解('\n',$s))。“
$s”;
如果我试着一个接一个地运行它们,它就会停止运行


是否有更好的方法修补更新行?

不幸的是,MySQL当前(5.5)没有正则表达式版本的
REPLACE()
。在MySQL中这样做,虽然IMO更喜欢而且速度更快,但如果没有对
REPLACE()
的一个或多个嵌套调用,就不能选择

RTRIM(REPLACE(REPLACE(..., '8', ''). '9', ''))
注意:以上数字将替换所有数字。不仅仅是右边的。留给未来的读者,但在OP的情况下不起作用

因此,PHP是您唯一的选择。借用自Marc B:

// loop over all rows
$no_ending_digits = rtrim($field, '0123456789');
// update row

如果这是一次性交易的话,用php做这件事可能会更快。与将该字段读入php并执行
rtrim($field,'0123456789')相比,您将花费更多的时间来计算sql端字符串操作。您是否尝试选择另一个表。顺便说一句,这和一年前的问题是一样的吗@MarcB我同意PHP是一个不错的选择,但是当查询需要很长时间才能执行时,他可能会遇到麻烦。@Mr.radial确切地说,我现在有8000行要更新!,如何在单个查询中执行此操作?或者我必须一个接一个地做?@Mr.radial和nop its not:)检查它exputreplace()将丢弃字段中的所有数字。op只想删除右手边的数字。
// loop over all rows
$no_ending_digits = rtrim($field, '0123456789');
// update row