MySQL 中的子字符串替换

Substring replacement in MySQL

我在 mysql 数据库中有这样的字段 table,

<table border=1 ><tr><td>No</td><td>Value</td></tr>
<tr><td>1</td><td>System Code id(19032809128); unique list system</td></tr>
  <tr><td>2</td><td>System Code id(526371576351726); unique list system</td></tr>
  <tr><td>3</td><td>System Code id(162837120831092); unique list system</td></tr>
  <tr><td>4</td><td>System Code id(31-329-103912); unique list system</td></tr>
</table>

有人能告诉我,如何只删除这个字符串部分 "id(.....);" 其中 id 中的值在每个字段中都不相同。使用 mysql 查询删除。

你用 php

   echo "<table border='1'>
  <tr>
  <th>No</th>
  <th>Value</th>
  </tr>";

  while($row = mysqli_fetch_array($result))
   {
   echo "<tr>";
   echo "<td>" . $row['No'] . "</td>";
   echo "<td>" . $row['Value'] . "</td>";
   echo "</tr>";
   }
   echo "</table>";

很奇怪的要求;删除该信息后,除了标题 No 下的值外,每一行都将相同。这是一个可以执行此操作的查询(尽管我不明白您为什么要这样做):

select No, 'System Code  unique list system' as Value from table where 1;

来自 SO 的最新消息是 regex replace is not a function in mysql。因此,如果您想进行真正的正则表达式替换,您的替代方法是使用 php/python/etc.

应该是这样的

select No, concat( 'System Code  (',Your_value_column , ') unique list system' ) as Value
 from your_table;

MySQL 没有进行正则表达式替换的功能。

这是执行您问题中的特定示例的查询示例。但是如果你有其他情况(比如在一个字符串中进行多次替换),这将不得不作为一个指导方针。

SELECT no, CONCAT(
   SUBSTRING(value, 1, LOCATE('id(', value)-1), 
   SUBSTRING(value, LOCATE(');', value)+3)) AS value
FROM mytable;

演示:SQLFiddle

如果使用任何支持正则表达式字符串替换的编程语言,这样做会更容易。例如,按原样获取字符串,并在 PHP.

中进行替换

这是一个例子:

$pdo = new PDO(...);

$stmt = $pdo->query("SELECT no, value FROM mytable");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  $no = $row["no"];
  $value = preg_replace("/id\([0-9-]+\); /", "", $row["value"]);
  print "<tr><td>$no</td><td>$value</td></tr>\n";
}