MySQL字符串动态替换

时间:2013-12-23 14:14:10

标签: mysql regex

我有一个包含大量文本的TEXT字段,在某些时候我有== Gallery == Random text ==Source==

我想知道是否有办法用MySQL替换== Gallery == Random Text什么都没有(只是删除)?

目前正在使用此更新

update `wiki_article_revisions` 
set `opcode` = replace(`opcode`, '== Gallery == ==Sources==', '');

但是我找不到一种方法来检测这两个文本片段之间的随机文本。

4 个答案:

答案 0 :(得分:1)

你不能在MySQL中没有函数支持UPDATE与正则表达式(How to do a regular expression replace in MySQL?)。你必须将内容加载到一个字符串,然后使用php执行php正则表达式替换为字符串,以删除带有新内容的更新的randome文本:

<?php

$con = mysqli_connect("localhost","username","password","db_name");
$result = mysqli_query($con,"SELECT * FROM wiki_article_revisions");

$regex = '/(\(== gallery ==\))([^\0]*)(\(== source ==\))/';

while($row = mysqli_fetch_array($result))
{
    preg_replace($regex, "$2", $row['opcode']);
    $mysqli_query("UPDATE wiki_article_revisions SET opcode=" . $row['opcode'] . "WHERE id=" . $row['id']);
}

?>

答案 1 :(得分:0)

您可以手动构建字符串,例如:

select concat(left(val, locate('== Gallery == ', val) - 1),
              substring(val, locate('==Source==', val) + 10)
             )

这假设每个分隔符只在整个字符串中出现一次。

作为update,这将是:

update `wiki_article_revisions` 
    set `opcode` = concat(left(opcode, locate('== Gallery == ', opcode) - 1),
                          substring(opcode, locate('==Source==', opcode) + 10)
                         );

答案 2 :(得分:0)

http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

update `wiki_article_revisions` 
set `opcode` = REPLACE(opcode, '== Gallery == ==Sources==', '');

答案 3 :(得分:0)

UPDATE wiki_article_revisions
SET opcode = REPLACE(opcode,SUBSTRING_INDEX(opcode,'==',3),'')

SQL Fiddle

假设所有行上的 ==个实例数相等。如果您只想要随机文本:

UPDATE wiki_article_revisions
SET opcode = (SUBSTRING_INDEX(SUBSTRING_INDEX(opcode,'==',3),'==',-1))

SQL Fiddle