みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

正規表現で置換

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

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

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

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

投稿日時 - 2008-06-26 10:42:31

QNo.4130260

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

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

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

投稿日時 - 2008-06-26 13:32:59

補足

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

カラムに含まれる文字列の中から「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:24

ANo.1

UPDATE テーブル SET カラム ='ttp://uheuhe.jp'
WHERE カラム REGEXP 'ttp://hohe.jp/[0-9]{3}/[0-9]{5}';

投稿日時 - 2008-06-26 12:42:31

補足

すいません!

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

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

宜しく御願い致します。

投稿日時 - 2008-06-26 13:02:22

あなたにオススメの質問