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