MySQL中的子串替换

时间:2016-07-29 16:34:19

标签: mysql regex phpmyadmin

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

<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查询删除。

4 个答案:

答案 0 :(得分:0)

你使用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>";

答案 1 :(得分:0)

非常奇怪的要求;在您删除该信息后,除了标题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。

答案 2 :(得分:0)

应该像这样的蠢事

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

答案 3 :(得分:0)

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