MYSQLの正規表現による置換について


<dammy>○○</dammy>
という値を
<dammy>××</dammy>
に変換したいと考えています。

○○のなかには、どんな値が入っているか分かりません。
正規表現を使えば、置換できると思うのですが、
MYSQLでのSQLを教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/08/02 14:05:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント35pt

正規表現というよりはワイルドカードのことかと思いますが、

http://dev.mysql.com/doc/refman/4.1/ja/mysqlshow.html

UPDATE table SET data='<dammy>××</dammy>' WHERE data LIKE '<dammy>%</dammy>'

ということでしょうか。


あるいは、このあたりのお話でしょうか。

http://f32.aaa.livedoor.jp/~azusa/index.php?t=mysql&p=string

id:wakutan

追加で条件がありまして、

<dammy>○○</dammy> の前後には、0文字以上のなんらかの文字があります。

update table set data=replace(data,'<dammy>%</dammy>',<dammy>××</dammy>)

という表現は可能なのでしょうか?

2008/07/26 15:03:16
id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント35pt

MySQL での replace 関数は正規表現に対応していないので、

出力した結果を使用して、SQL を実行するか、PHP のようなスクリプトを利用すれば、

実現できるでしょう。


以下 PHP のサンプルです。

<?php
    $username = "mysql_user";
    $password = "mysql_password";
    $host     = "localhost";
    $database = "testdb";

    $con = mysql_connect($host, $username, $password) or die("Connect Error!!");
    mysql_select_db($database) or dir("DB SELECT Error!!");

    $sql = "SELECT * FROM my_table WHERE data LIKE '%<ttt>%</ttt>%'";
    $result = mysql_query( $sql, $con) or dir( "QUERY ERROR ".$sql );
    while ($item = mysql_fetch_array($result)) {
        $in_data = $item['data'];
        $out_data = ereg_replace( "<ttt>.+</ttt>", "<sss>XXX</sss>", $in_data );
        mysql_query("UPDATE my_table SET data = '".$out_data."' WHERE data ='".$in_data."'");
    }
    mysql_close($con);
?>

http://php.benscom.com/manual/ja/function.ereg-replace.php

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません