人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


●質問者: wakutan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL いるか 正規表現 SQ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント

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

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

◎質問者からの返答

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

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

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

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


2 ● Mook
●35ポイント

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ