本帖最后由 ttjacky 于 2011-10-01 11:28:44 编辑

解决方案 »

  1.   

    MYSQL中目录只支持正则匹配,不支持正则提取。你的这个需要,如果格式固定,则可以到第二个[ 到第三个] 之间的记录。可以通过一些字符串函数实现。 但如果格式不固定则只能写程序或者存储过程实现。
      

  2.   

    mysql> set @x='[at
    tach]886[/attach]
    ';
    Query OK, 0 rows affected (0.00 sec)mysql> select substring_index(substring_index(@x,']',-4),'[',3);
    +---------------------------------------------------+
    | substring_index(substring_index(@x,']',-4),'[',3) |
    +---------------------------------------------------+
    | [attach]886[/attach]                              |
    +---------------------------------------------------+
    1 row in set (0.00 sec)mysql>
      

  3.   

    MYSQL不支持正则替换,假设格式固定(只有2个[attach])
    SET @a='=http://www.aaa.com/viewthread.php?tid=317&page=1#pid5302][attach]886[/attach]';
    SELECT RIGHT(@a,LENGTH(@a)-INSTR(@a,'[attach]'))
      

  4.   

    你导出来成文本的  用awk和sed处理
      

  5.   

    谢谢大家,我根据大家的建议搞好了
    用这样的句子,实际情况比上面的例子稍复杂些update table
    set message =
    replace(concat(left(message,15),substring(message,instr(message,'][')+1)),'[/url]','')
    where message regexp '\.+quote\.*url=http://www.aaa.com/viewthread\.*'
      

  6.   

    建议先把那个字段(或者相关的记录)先读取出来,然后使用编程语言进行替换,然后对每个记录依次更新。
    如果使用mysql的处理函数来直接进行更新,那会很慢的,而且无法使用索引。