【问题标题】:mysql trim column in database数据库中的mysql修剪列
【发布时间】:2013-01-15 18:31:31
【问题描述】:
UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));

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

|ID|Name      |
|1 |demo 6    |
|2 |demo3 500 |

我想要的是通过删除这个 int 来修剪最后一个字符为 int 的 NAME。

输出

|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>";

如果我尝试一个一个地运行它们,它就会用完..

有没有更好的方法来修补更新行?

【问题讨论】:

  • 如果这是一次性交易,在 php 中执行此操作可能更快。你会花更多的时间来弄清楚 sql 端的字符串操作,而不是简单地将该字段插入 php 并执行rtrim($field, '0123456789');
  • 您是否尝试过 SELECT INTO 另一个表。顺便说一句,这和一年前的问题是一样的吗stackoverflow.com/questions/6072197/…
  • @MarcB 我同意 PHP 是可行的方法,但是当查询需要很长时间执行时,他可能会遇到麻烦。
  • @Mr.Radical 确切地说,我现在有 8000 行要更新!,我怎么能在单个查询中做到这一点?还是我必须一件一件地做?
  • @Mr.Radical 和 nop 它不是 :) 检查一下

标签: php mysql codeigniter trim


【解决方案1】:

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

RTRIM(REPLACE(REPLACE(..., '8', ''). '9', ''))

注意:以上将替换所有数字。不仅仅是那些右边。留给未来的读者,但不适用于 OP。

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

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

【讨论】:

  • 但 replace() 将丢弃该字段中的所有数字。 op 只是想删除右侧的数字。
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多