我有一个包含大量文本的TEXT字段,在某些时候我有== Gallery == Random text ==Source==
。
我想知道是否有办法用MySQL替换== Gallery == Random Text
什么都没有(只是删除)?
目前正在使用此更新
update `wiki_article_revisions`
set `opcode` = replace(`opcode`, '== Gallery == ==Sources==', '');
但是我找不到一种方法来检测这两个文本片段之间的随机文本。
答案 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),'')
假设所有行上的 ==
个实例数相等。如果您只想要随机文本:
UPDATE wiki_article_revisions
SET opcode = (SUBSTRING_INDEX(SUBSTRING_INDEX(opcode,'==',3),'==',-1))