dポイントプレゼントキャンペーン実施中!

MySQLの置換関数では正規表現は使えないのでしょうか?

以下のようなSQLを実行させたいのですが、「12345678」の部分はランダムで毎回変わります(8桁は固定)。

UPDATE テーブル SET カラム =
REPLACE(カラム, 'ttp://hohe.jp/123/45678', 'ttp://uheuhe.jp');

php等は使用せずmysqlだけで処理させたいと考えています。
宜しく御願いします。

A 回答 (2件)

結局REPLACEは正規表現対象じゃなさそうですから、なんとか別の手段で


やるしかないでしょう。

今回の件は、ヒットさせる文字列の長さが一定なので、こんな感じでいけるのでは?

UPDATE テーブル SET カラム= CONCAT('ttp://uheuhe.jp',MID(カラム,24))
where カラム regexp 'ttp://hohe.jp/[0-9]{3}/[0-9]{5}'

この回答への補足

小出しですいません。
概要(やりたい事)をお知らせいたします。。。

カラムに含まれる文字列の中から「http://******.***.ne.jp/*******/123/***.jpg」で始まるURLを見つけ、
http://***.***.*.**/*******/2008/06/***.jpg」に置換したい。置換後はカラムに全ての文字列を更新。
*123はランダムだが3桁は固定。
*文字列の中に埋もれているのでURL前後の文字数は変動。

yambejpさんのSQLを参考に以下を作成してみましたが、
MySQLでは、Update 文の中でサブクエリを使うと、You can’t specify target table ~ for update in FROM clause というエラーメッセージが出ることがあります。
サブクエリの中で更新するテーブルを読んでいるような場合に発生するらしい。

文字列の一番目からhttpが出現する前までの文字までを求めるこのサブクエリがUpdateとの中では怒られてしまいます。。。
MID(カラム,1,(select locate('http',(select カラム from テーブル where user_no = 55)))


宜しく御願いします。

補足日時:2008/06/27 09:57
    • good
    • 1

UPDATE テーブル SET カラム ='ttp://uheuhe.jp'


WHERE カラム REGEXP 'ttp://hohe.jp/[0-9]{3}/[0-9]{5}';

この回答への補足

すいません!

説明不足というか、根本的に問題定義が足りませんでした。

ttp://hohe.jp/123/45678/******.jpg
これを
ttp://uheuhe.jp/******.jpg
このように加工したい。

宜しく御願い致します。

補足日時:2008/06/26 13:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!